Windows Scripting: Difference between revisions
From Andreida
Line 73: | Line 73: | ||
* the "(" must be on the same line as the if |
* the "(" must be on the same line as the if |
||
* the ") else (" can not be on different lines |
* the ") else (" can not be on different lines |
||
=== text color === |
|||
The documentation from MS is here: https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences?redirectedfrom=MSDN |
|||
You will need to output a certain character which is just called ESC. It is the "character" with the number 27 in the ASCII table, so you can create it on the console if you hold ALT and enter with the numlock digits "027". When you release ALT afterwards you should get "^[". |
|||
You can try it but it will be of not much use. It would be: |
|||
* ALT + 027 |
|||
* [92m |
|||
* <return> |
|||
Now your prompt should be green. |
|||
To get back to normal: |
|||
* ALT + 027 |
|||
* [0m |
|||
* <return> |
|||
Try the following script: |
|||
<pre> |
|||
@echo off |
|||
for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a" |
|||
set GREEN=%ESC%[92m |
|||
set DEFAULT=%ESC%[0m |
|||
set ERROR=%ESC%[101;93m |
|||
call :out Dies ist ein erster Test. |
|||
call :out Dies ist ein zweiter Test. |
|||
call :outError This is not a test, please leave this script immediately! |
|||
exit /B |
|||
:out |
|||
echo %GREEN% %* %DEFAULT% |
|||
exit /B |
|||
:outError |
|||
echo %ERROR% %* %DEFAULT% |
|||
exit /B |
|||
</pre> |
Revision as of 17:54, 19 September 2020
directory of current script
change to the directory of the executed script:
chdir /D %~dp0
The /D allows to change drives too.
functions
@echo off echo 1 call :func_1 2 call :func_1 3 echo 4 exit /B :func_1 echo %1 (called in a function) exit /B 0
Output:
>test 1 2 (called in a function) 3 (called in a function) 4
parameters
- Parameters to a script are %1 to %9
- %0 is the call and should contain the script name
- %10 does not exist
- %* "is" all parameters, even if there are 15
- if you want to have more than 9 parameters, google for shift or use something like
FOR %%A IN (%*) DO ( echo xxx %%A xxx )
Output:
>test 1 2 3 4 5 6 7 8 9 10 11 12 13 x 1 x x 2 x x 3 x x 4 x x 5 x x 6 x x 7 x x 8 x x 9 x x 10 x x 11 x x 12 x x 13 x
test for parameters
@echo off if [%1]==[] ( echo Parameter 1 missing! ) else ( echo Paramater 1 found: %1 )
- '[' and ']' around "%1" are just for the case it is empty. You can use anything you want:
if xx%1xx==xxxx (
- you need a space between "[]" and '(' in the if condition
- the "(" must be on the same line as the if
- the ") else (" can not be on different lines
text color
The documentation from MS is here: https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences?redirectedfrom=MSDN
You will need to output a certain character which is just called ESC. It is the "character" with the number 27 in the ASCII table, so you can create it on the console if you hold ALT and enter with the numlock digits "027". When you release ALT afterwards you should get "^[". You can try it but it will be of not much use. It would be:
- ALT + 027
- [92m
- <return>
Now your prompt should be green. To get back to normal:
- ALT + 027
- [0m
- <return>
Try the following script:
@echo off for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a" set GREEN=%ESC%[92m set DEFAULT=%ESC%[0m set ERROR=%ESC%[101;93m call :out Dies ist ein erster Test. call :out Dies ist ein zweiter Test. call :outError This is not a test, please leave this script immediately! exit /B :out echo %GREEN% %* %DEFAULT% exit /B :outError echo %ERROR% %* %DEFAULT% exit /B