Batch – Cheatsheet

Umlaute nutzen (Kodierung ändern)

Normalerweise werden Batch-Skripte im Texteditor mittels UTF-8 kodiert und gespeichert. Nutzt man darin einen Umlaut (z.B.: Schüler), wird dieser bei der Skript Ausführung falsch dargestellt und z.B.: eine Datei kann nicht gefunden werden.

Um zu testen welche Kodierung die Kommandozeile hat, kann man einfach den Befehl „chcp“ eingeben:

850 = Multilingual

Die Kodierung kann folgendermaßen geändert werden:

::set Change Code Page für Umlaute = UTF-8
chcp 65001

for-Schleife

@ECHO off
::gibt die Zahlen der Variable/Liste aus
SET list=1 2 3 4 
FOR %%a IN (%list%) DO ( 
	ECHO %%a 
)
PAUSE

Mit dem Parameter /L wird über einen Bereich von Zahlen iteriert (FOR /L):

FOR /L %%parameter IN (start,step,end) DO command

@ECHO off
::gibt die Zahlen von 0 bis 10 aus
FOR /L %%a IN (0,1,10) DO (
	echo %%a
)
PAUSE

Dies kann auch für das Auslesen eines Arrays genutzt werden. Dann muss jedoch die Code-Ausführung verlangsamt werden (enabledelayedexpansion), damit der Array korrekt durchlaufen wird.

@ECHO off
::langsame Ausführung wird aktiviert
setlocal enabledelayedexpansion 

SET myArray[0]=Richi Meier
SET myArray[1]=Susi
SET myArray[2]=Simon

FOR /L %%a IN (0,1,2) DO (
	::bei der langsamen Ausführung müssen die ! Ausrufezeichen genutzt werden
	echo !myArray[%%a]!
)

pause
exit

Dateien auslesen

Mit dem Parameter /F wird über Dateien iteriert (FOR /F):

FOR /F [„options“] %%parameter IN (filenameset) DO command

[„options“] sind optional und müssen nicht angegeben werden.

@ECHO off
::gibt jede Zeile der Datei namen.txt aus
FOR /f %%a IN (namen.txt) DO (
	echo %%a
)

Komma separierte Datei ausgeben:

@ECHO off
::gibt jede Zeile aus
FOR /f "tokens=* delims=," %%a IN (namenMitGeburtsdatum.txt) DO (
	echo %%a
)
@ECHO off
::gibt nur den Nachnamen aus
FOR /f "tokens=2 delims=," %%a IN (namenMitGeburtsdatum.txt) DO (
	echo %%a
)
@ECHO off
::gibt den Vornamen und den Nachnamen aus
FOR /f "tokens=1,2 delims=," %%a IN (namenMitGeburtsdatum.txt) DO (
	echo %%a - %%b
)

Dateiinhalt suchen und ersetzen

@ECHO off
::langsame Ausführung wird aktiviert, damit der loop nacheinander durchlaufen wird
setlocal enabledelayedexpansion 
::was soll mit was ersetzt werden
set stringToFind=Leithauser
set stringReplace=Scheglmann

(FOR /f "tokens=* delims=," %%a IN (namenMitGeburtsdatum.txt) DO (
	::wurde der String in der aktuellen Zeile gefunden?
	ECHO %%a | FIND /I "%stringToFind%">Nul && ( 
		set tempLine=%%a
		SET updatedString=!tempLine:%stringToFind%=%stringReplace%!
		echo !updatedString!
	) || (
		echo %%a
	)
))

pause

Der Pipe-Operator (|) übernimmt die Ausgabe eines Befehls und leitet diese an die Eingabe eines anderen Befehls weiter. In diesem Fall wird mittels ECHO die Zeile ausgegeben und an FIND weitergeleitet.

Hier: FIND /I „%stringToFind%“>Nul wird das Ergebnis mit >Nul verworfen und nur geschaut ob etwas gefunden wurde.

Programm starten und beenden

@Echo off
tasklist /fi "ImageName eq AnyDesk.exe" && ( 
	taskkill /f /im AnyDesk.exe /t
) || ( 
	cd "C:\Program Files (x86)\AnyDesk"
	start AnyDesk
)

Hier wird das Programm AnyDesk gestartet bzw. beendet, je nachdem ob es gerade läuft oder nicht. Das Skript muss mit Administratorenrechten ausgeführt werden, damit die Prozesse mittels „taskkill“ beendet werden können.

Ordner auflisten und in Datei speichern

@echo off   
::set Change Code Page für Umlaute = UTF-8
chcp 65001
::Pfad des Skripts
SET scriptPath=%~dp0
SET berichtePath=C:\git\berichte\Anwendungsdaten\Berichte\Schüler

cd %berichtePath%
::listet nur die Ordner und nur die Namen derer auf
dir /d/b > %scriptPath%\getAllSchuelerBerichte.txt

Es wird zuerst der Code Page auf UTF-8 gesetzt, damit Umlaute richtig angezeigt und verarbeitet werden können. Dann wird in den Pfad der Ordner gewechselt und diese dann mit dem „dir“-Befehl in eine Datei gespeichert, die am gleichen Ort wie das Skript erstellt wird. Die Parameter „/d/b“ listen nur die Ordner auf und diese nur mit Namen, ohne weitere Informationen.

Netzwerklaufwerk hinzufügen und entfernen

Mit Hilfe von Batch kannst du einfach ein Netzwerklaufwerk, z.B.: eine NAS-Box, automatisch deinem PC hinzufügen und auch entfernen.

::fügt ein Laufwerk Z: hinzu:
net use Z: \\fritz.box\FRITZ.NAS\WD-Elements2621-01

Nach dem Hinzufügen kann es sein, dass du aufgefordert wirst deine Zugangsdaten einzugeben.

Willst du das Laufwerk wieder entfernen kann dieses Skript genutzt werden:

::entfernt ein Netzwerklaufwerk mit Buchstaben Z
net use Z: /d

Wenn du das Laufwerk nicht nur entfernen willst, sondern auch die Anmeldedaten löschen möchtest kannst du das vorherige Skript erweitern:

::entfernt ein Netzwerklaufwerk mit Buchstaben Z
net use Z: /d
::entfernt gespeicherte Anmeldedaten (Fritz.Box)
cmdkey.exe /delete:Domain:target=fritz.box

Manchmal kann es sein, dass beim erneuten Verbinden mit dem Laufwerk die Anmeldedaten nicht gelöscht wurden, obwohl dies mittels „cmdkey.exe“ geschehen hätte sollen. Dann hilft ein Neustart des Computers.

Alternativ könnte man auch das Laufwerk verbunden lassen und die Anmeldedaten mittels „cmdkey.exe“ löschen:

::entfernt gespeicherte Anmeldedaten (Fritz.Box)
cmdkey.exe /delete:Domain:target=fritz.box

Du kannst auch das Batch-Skript automatisch beim Starten des PCs ausführen lassen. Dazu musst du nur das Skript in den Ordner: Autostart einfügen. Diesen kannst du mittels folgendem Befehl öffnen:

Die aktuell verbunden Netzwerklaufwerke kannst du dir mit „net use“ anzeigen lassen.

Eine Liste aller gespeicherten Anmeldedaten kann mit folgendem Code ausgegeben werden:

@echo off
::speichert alle Einträge in CmdKeyListe.txt
cmdkey.exe /list > "%TEMP%\CmdKeyListe.txt"
::speichert nur die Ziele in NurZiele.txt
findstr.exe Ziel "%TEMP%\CmdKeyListe.txt" > "%TEMP%\NurZiele.txt"

FOR /F "tokens=1,2 delims= " %%A IN (%TEMP%\NurZiele.txt) DO (
	echo %%B
)
::entfernt die erzeugten Dateien wieder
del "%TEMP%\CmdKeyListe.txt" /s /f /q
del "%TEMP%\NurZiele.txt" /s /f /q

pause
exit

Links:

unsere-schule.org

×

Batch – Cheatsheet

Code: