19.04.2023

Windows Batch / Scripte

Eingabeaufforderung
Befehle
Schleife und diverse Befehle
Datum und Zeit im Script verwenden
Anmeldescript
Dateien sichern
prüfen, ob ein Dienst läuft
sonstiges

Shell Befehle und Variablen
Batch Befehle
Command-line reference A-Z Win7, Vista
Command-line reference A-Z WinXP

Seitenanfang

Eingabeaufforderung

Taste Funktion
F7 Liste der eingegebenen Befehle
F8 letzten Befehle durchblättern, wie Taste rauf, runter
   

- jede Eingabeaufforderung mit AdminRechten in Blau-Gelb

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"AutoRun"="@whoami /groups | @find /i \"S-1-16-12288\" >nul && @color 9E"

 

Seitenanfang

Befehle

Befehl Bedeutung
whoami Name des angemeldeten Benutzers
whoami /groups Gruppen in denen der Nutzer Mitglied ist
cd /d D:\Daten in das Verzeichnis Daten auf einem anderen Laufwerk wechseln
set DIRCMD=/ogn /p Variable setzen, bei der Ausgabe von DIR Verzeichnisse zuerst, alphabetisch sortiert,/p Seitenweise Ausgabe
sc config <Dienst> start= auto Dienst Start Automatisch
sc config <Dienst> start= delayed-auto Dienst Start Automatisch verzögert
sc config <Dienst> start= demand Dienst Start Manuell
sc config <Dienst> start= disabled Dienst Start Deaktiviert
call "path\file.bat" -Parameter innerhalb einer Batch eine anderes Batchfile ausführen
start "path\file.bat" -Parameter innerhalt einer Batch ein Programm ausführen
Benutzerverwaltung
net accounts Kennworteinstellungen anzeigen
net user <Username> <Passwort> /add Benutzer erstellen
net group <Gruppenname> /add Gruppe erstellen
TIMEOUT /T 10 im Batch File Zeit warten, z.B. 10 Sekunden
CHOICE /T 10 /D J /N >NUL im Batch File Zeit warten, z.B. 10 Sekunden

Beispiele

- wenn der Benutzer in der Gruppe "Administrator" (S-1-16-12288) ist wird die Farbe 47 (Rot) gesetzt

whoami /groups | find "S-1-16-12288" > nul
if errorlevel 1 color 47

 

 

Seitenanfang

Schleife und diverse Befehle

Um den Inhalt aller *.CAB Dateien einer Windows Install Version zu sehen bracht man eine Schleife, die jede Datei hintereinander abarbeitet. Das macht der Befehl aus guten alten DOS Zeit, wenn man den Befehl in einer Batch abarbeitet muß man %a durch %%a ersetzen

FOR %a IN (*.cab) DO EXTRACT %a >>win.txt

einen Befehl unter Windows an bestimmten Wochentagen ausführen.

at 22:00 /every:Mo,Di,Mi,Do,Fr c:\winnt\system32\cmd.exe
Seitenanfang

Datum und Zeit im Script verwenden

Datum und Uhrzeit in einer Variable speichen und ausgeben.

FOR /F %%a in ('date/T') do set datum=%%a
FOR /F %%a in ('time/T') do set zeit=%%a
echo %datum% %zeit%

es gibt auch schon vordefinierte Variablen für Datum und Zeit.

# echo %date% %time%
27.04.2008 20:02:40,90

Varianten der Datumsausgabe

echo %DATE:~-2%-%DATE:~-7,2%-%DATE:~-10,2%
12-09-30
echo %date:~6,4%.%date:~3,2%.%date:~0,2%
2012.09.30
%date:~6,4%.%date:~3,2%.%date:~0,2% %time:~0,2%.%time:~3,2%.%time:~6,2%
2012.09.30 19.01.00

- für Scripte nur Datum

for /f "delims=. tokens=1-3" %%a in ('echo %date%') do set date=%%c-%%b-%%a
echo %date%
2012-09-30

- für Scripte nur Zeit

for /f "tokens=1-4 delims=.:, " %%a in ('echo %time%') do set time=%%a:%%b
echo %time%
19:01
Seitenanfang

Anmeldescript

wenn der Rechner NOTEBOOK heist, wird Befehl-1 übersprungen

if %COMPUTERNAME% == NOTEBOOK goto weiter
Befehl-1
:weiter
befehl-2
goto end
:end
Seitenanfang

Dateien sichern

alle Truecrypt Dateien (.tc) eines Verzeichnisses sichern

@echo off
for /f "delims=. tokens=1-3" %%a in ('echo %date%') do set date=%%c-%%b-%%a
echo Aktuelles Datum: %date%
echo.
if exist F:\Backup goto LW_F
if exist G:\Backup goto LW_G

GOTO WEITER

:LW_F
D:
CD "\Eigene Dateien"
FOR %%a in (*.tc) do (
	echo d | xcopy %%a F:\Backup\%date%-%%a /f /y >nul
	echo 	Datei %%a kopiert
	echo.
	)
GOTO END

:LW_G
D:
CD "\Eigene Dateien"
FOR %%a in (*.tc) do (
	echo d | xcopy %%a G:\Backup\%date%-%%a /f /y >nul
	echo 	Datei %%a kopiert
	echo.
	)
GOTO END

:WEITER
echo	Kein Backup-Laufwerk gefunden

:END
echo.
echo.
echo		beenden mit beliebige Taste
pause > nul
exit
Seitenanfang

prüfen, ob ein Dienst läuft

- prüfen, ob der angegebene Dienst läuft.

@echo off
net start | find /I "<Name des Dienstes>" >NUL
IF NOT ERRORLEVEL 1 GOTO STOP
GOTO START
:STOP
echo "Dienst läuft"
GOTO END
:START
echo "Dienst läuft nicht"
:END

- wenn Dienst nicht läuft, wird er gestartet.

for /F "tokens=3 delims=: " %%H in ('sc query "<Name des Dienstes>" ^| findstr "        STATE"') do ( 
  if /I "%%H" NEQ "RUNNING" (
   net start "<Name des Dienstes>"
  )
)
@echo Off
set ServiceName=<Name des Dienstes>

sc queryex "%ServiceName%"|Find "STATE"|Find /v "RUNNING">Nul&&(
    echo %ServiceName% laeuft nicht
    echo starte %ServiceName%

    net start "%ServiceName%">nul||(
        echo %ServiceName% fehlerhaft gestartet
        exit /b 1
    )
    echo %ServiceName% gestartet
    exit /b 0
)||(
    echo %ServiceName% laeuft
    exit /b 0
)
Seitenanfang

sonstiges

- Prüft ob ein Parameter angegeben wurde

@echo off
if "%1"=="" goto help
:weiter
...
:help
echo		Befehl [Parameter]
goto end
:end