batch-file
Unterschiede zwischen Batch (Windows) und Terminal (Linux)
Suche…
Einführung
Batch und Bash sind sehr unterschiedlich. Stapelflags werden mit einem
/
, während Bashflags ein -
. Die Kapitalisierung ist in bash wichtig, aber (fast) gar nicht in Batch. Batch-Variablennamen können Leerzeichen enthalten, Bash-Variablennamen nicht. Letztendlich sind beide Möglichkeiten, die Befehlszeile zu manipulieren und damit zu interagieren. Es überrascht nicht, dass es zwischen den Fähigkeiten der beiden Systeme eine vernünftige Überlappung gibt.
Bemerkungen
-
bitsadmin
ist zugunsten des PowerShell-Cmdlets BITS veraltet, funktioniert jedoch noch ab Windows 10 Version 1607 -
certutil
trennt Paare hexadezimaler Ziffern durch ein Leerzeichen, sodassmd5sum
einen Beispielwert vond41d8cd98f00b204e9800998ecf8427e
, währendcertutil
denselben Wert wied4 1d 8c d9 8f 00 b2 04 e9 80 09 98 ec f8 42 7e
- Um zu einem anderen Laufwerk zu
cd
(z. B. von C: nach D :) muss das Flag/d
verwendet werden -
del
kann keine Ordner löschen, verwenden Sie stattdessenrm
-
grep
ist so viel mächtiger alsfind
undfindstr
, es ist fastfindstr
, sie zu vergleichen;find
hat keinefindstr
undfindstr
hat sehr eingeschränktefindstr
([az]{2}
ist keine gültige Syntax, aber[az][az]
ist) -
for
Schleifen an der Windows-Eingabeaufforderung können nur einzeilige Variablennamen verwenden. Dies ist die einzige Zeit, in der die Namen der Batch-Variablen die Groß- und Kleinschreibung berücksichtigen - Verwenden Sie
for
Schleifen an der Eingabeaufforderung auch die Variable%A
anstelle von%A%
for
Schleifen in Batch-Skripts verwenden Sie die Variable Form%%A
-
md
erstellt automatisch alle erforderlichen übergeordneten Verzeichnisse, währendmkdir
das Flag-p
benötigt -
rem
darf nicht als Inline-Kommentarzeichen verwendet werden, es sei denn, ihm wird ein&
vorangestellt. -
::
darf überhaupt nicht als Inline-Kommentar verwendet werden und sollte auch nicht innerhalb eines Codeblocks (Satz von Klammern) verwendet werden
- Beachten Sie, dass einige Windows - Befehl wie
ping
noch verwendet-
als Flags
Stapelbefehle und ihre Bash-Äquivalente
Stapel | Bash | Beschreibung |
---|---|---|
command /? | man command | Zeigt die Hilfe zum Befehl an |
bitsadmin | wget oder curl | Lädt eine Remote-Datei herunter |
certutil -hashfile file_name MD5 | md5sum file_name | Ruft die MD5-Prüfsumme von Dateiname ab |
cd | pwd | Zeigt das aktuelle Verzeichnis an |
cd directory | cd directory | Ändert das aktuelle Verzeichnis in das angegebene Verzeichnis |
cls | clear | Löscht den Bildschirm |
copy | cp | Kopiert eine oder mehrere Dateien aus einem Quellpfad in einen Zielpfad |
date | date | Zeigt das Datum an oder stellt es basierend auf Benutzereingaben ein |
del | rm | Löscht eine oder mehrere Dateien |
dir | ls | Zeigt eine Liste der Dateien und Verzeichnisse im aktuellen Verzeichnis an |
echo | echo | Zeigt Text auf dem Bildschirm an |
exit | return | Beendet ein Skript oder eine Subroutine |
exit | logout | Schließt die Eingabeaufforderung oder das Terminal |
fc | diff | Vergleicht den Inhalt von zwei Dateien |
find "string" file_name | grep "string" file_name | Durchsucht Dateiname nach Zeichenfolge |
findstr "string" file_name | grep "string" file_name | Durchsucht Dateiname nach Zeichenfolge |
for /F %A in (fileset*) do something | for item in fileset*; do; something; done | Tun Sie etwas für jede Datei in einer Reihe von Dateien |
for /F %A in ('command') do something | `command` | Gibt die Ausgabe eines Befehls zurück |
for /L %A in (first,increment,last) do something | for item in `seq first increment last`; do; something; done | Beginnt zuerst und zählt bis zum letzten Schritt |
forfiles | find | Sucht nach Dateien, die bestimmten Kriterien entsprechen |
if "%variable%"=="value" ( | if [ "variable"="value" ]; then | Vergleicht zwei Werte |
ipconfig | ifconfig | Zeigt IP-Informationen an |
md | mkdir | Erzeugt neue Ordner |
mklink | ln -s | Erzeugt einen symbolischen Link |
more | more | Zeigt jeweils einen Bildschirm der Ausgabe an |
move | mv | Verschiebt eine oder mehrere Dateien aus einem Quellpfad in einen Zielpfad |
pause | read -p "Press any key to continue" | Unterbricht die Skriptausführung, bis der Benutzer eine Taste drückt |
popd | popd | Entfernt den obersten Eintrag aus dem Verzeichnisstapel und wechselt in das neue oberste Verzeichnis |
pushd | pushd | Fügt das aktuelle Verzeichnis dem Verzeichnisstapel hinzu und wechselt zum neuen obersten Verzeichnis |
ren | mv | Benennt Dateien um |
rem oder :: | # | Kommentiert eine Codezeile |
rd | rmdir | Entfernt leere Verzeichnisse |
rd /s | rm -rf | Entfernt Verzeichnisse unabhängig davon, ob sie leer waren oder nicht |
set variable=value | variable=value | Legt den Wert der Variablen auf value fest |
set /a variable=equation | variable=$((equation)) | Führt mathematische Berechnungen durch (Stapel kann nur 32-Bit-Ganzzahlen verwenden) |
set /p variable=promptstring | read -p "promptstring" variable | Ruft die Benutzereingabe ab und speichert sie in einer Variablen |
shift | shift | Verschiebt Argumente um 1 (oder n, wenn angegeben) |
sort | sort | Sortiert die Ausgabe alphabetisch nach Zeile |
tasklist | ps | Zeigt eine Liste der laufenden Prozesse an |
taskkill /PID processid | kill processid | Tötet den Prozess mit PID processid |
time /t | date | Zeigt die aktuelle Uhrzeit an |
type | cat | Zeigt den Inhalt einer Datei an |
where | which | Durchsucht das aktuelle Verzeichnis und den PATH nach einer Datei oder einem Befehl |
whoami | id | Zeigt den Namen und die Gruppe des aktuellen Benutzers an |
Stapelvariablen und ihr Bash-Äquivalent
Stapel | Bash | Beschreibung |
---|---|---|
%variable% | $variable | Eine reguläre Variable |
!variable! | $variable | Eine Variable innerhalb eines Codeblocks, wenn setlocal enabledelayedexpansion ist |
%errorlevel% oder ERRORLEVEL | $? | Gibt den Status des vorherigen Befehls zurück: 0 bei Erfolg, 1 (oder etwas anderes), falls nicht |
%1 , %2 , %3 usw. | $1 $2 $3 usw. | Die für ein Skript angegebenen Parameter |
%* | $* | Alle Parameter eines Skripts |
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow