Inhaltsverzeichnis

Batch is used in Windows console programming.

@echo off
set name=John
echo Mein Name ist %name%.
@echo off
set /p name=Gib deinen Namen ein: 
echo Hallo %name%!
@echo off
set /p age=Gib dein Alter ein: 
if %age% geq 18 (
    echo Du bist volljährig.
) else (
    echo Du bist minderjährig.
)
@echo off
for /L %%i in (1,1,5) do (
    echo Schleifendurchlauf Nr. %%i
)
@echo off 
 
set filename=myfile.txt
set content=
 
for /f "usebackq delims=" %%i in ("%filename%") do (
    call set "content=%%content%% %%i"
)
 
echo File content: %content%
@echo off
goto main

rem Codeblock als "Funktion"
:MeineFunktion
echo Das ist meine Funktion.
echo Ich kann hier beliebigen Code platzieren.
goto :eof

rem Hauptprogramm
:main
echo Start des Hauptprogramms.
echo Hier passiert etwas ...
goto MeineFunktion
echo Hier geht es nach der Funktion weiter.

:eof
echo Ende des Skripts.
// arguments 
echo $1 $2
// variables
set uri=video.mp4
echo $uri
// prompt
set /p uri=Enter URI:
// save output of program (whoami) into variable
for /f "delims=" %a in ('whoami') do set user=%a
for %%x in (%*) do echo %%x

Input

SET /P "Continue [y/n]>" %confirm%
FINDSTR /I "^(y|n|yes|no)$" > NUL || GOTO: confirm

Error level

Ein Programm hat immer einen Rückgabewert. Zumeist wird 0 zurückgegeben um zu signalisieren das alles erfolgreich erledigt wurde. Im Fehlerfall wird eine 1 zurückgegeben. Manche Programme verwenden auch Fehlercodes. Solange die Rückgabe nicht 0 ist kann man von einem Fehler ausgehen.

ping -n 1 example.local | findStr "TTL" > nul

if %errorlevel% >= 1 (
echo host not reachable
) else (
echo host reachable
)

Labels

echo "static, default"
set /p type=Choose:

if %type% == "default" (

	goto default

) else (

	if %type% == "static" (

		goto static

	) else (

		goto none

	)

)

:default
goto done

:static
goto done

:none
goto done

:done 
echo Done

Loops

FOR %I IN (%USERPROFILE%\*) DO @ECHO %I

Looping Through Files

for /F %a in ('dir /B test') do echo %a

Looping Through Directories

FOR /D %I IN (%USERPROFILE%\*) DO @ECHO %I

Recursively loop through files in all subfolders of the %TEMP% folder

FOR /R "%TEMP%" %I IN (*) DO @ECHO %I

Recursively loop through all subfolders in the %TEMP% folder

FOR /R "%TEMP%" /D %I IN (*) DO @ECHO %I

Loop thru lines in a file

for /F "tokens=*" %%A in (tmp.txt) do echo %%A

Functions

@ECHO OFF
SETLOCAL

:: script global variables
SET me=%~n0
SET log=%TEMP%\%me%.txt

:: The "main" logic of the script
IF EXIST "%log%" DELETE /Q %log% >NUL

:: do something cool, then log it
CALL :tee "%me%: Hello, world!"

:: force execution to quit at the end of the "main" logic
EXIT /B %ERRORLEVEL%

:: a function to write to a log file and write to stdout
:tee
ECHO %* >> "%log%"
ECHO %*
EXIT /B 0

Parameters

SET filepath=%~f1

IF NOT EXIST "%filepath%" (
    ECHO %~n0: file not found - %filepath% >&2
    EXIT /B 1
)

Optional parameters

SET filepath=%dp0\default.txt

:: the first parameter is an optional filepath
IF EXIST "%~f1" SET filepath=%~f1

Interactive script

@ECHO OFF
SET interactive=0

ECHO %CMDCMDLINE% | FINDSTR /L %COMSPEC% >NUL 2>&1
IF %ERRORLEVEL% == 0 SET interactive=1

ECHO do work

IF "%interactive%"=="0" PAUSE
EXIT /B 0