Was sind einige der weniger bekannten, aber wichtigen und nützlichen Funktionen von Windows-Batchdateien?
Richtlinien:
- Eine Funktion pro Antwort
- Geben Sie sowohl eine kurze Beschreibung der Funktion als auch ein Beispiel an , nicht nur einen Link zur Dokumentation
- Beschränken Sie die Antworten auf native Funktionen , dh, Sie benötigen keine zusätzliche Software wie das Windows Resource Kit
Erläuterung: Wir verweisen hier auf Skripte, die von cmd.exe verarbeitet werden. Dies ist die Standardeinstellung für WinNT-Varianten.
(Siehe auch: Windows-Batchdateien: .bat vs .cmd? )
windows
batch-file
hidden-features
Chris Noe
quelle
quelle
call C:\WINDOWS\system32\ntbackup.exe backup /V:yes /R:no /RS:no /HC:off /M normal /L:s @daily.bks /F daily.bkf
. Und um alle Parameter dieser Zeile zu verstehen, führen Sie einfach ausC:\WINDOWS\system32\ntbackup.exe /?
.Bringt Sie zu dem durch path angegebenen Verzeichnis .
Bringt Sie zurück zu dem Verzeichnis, aus dem Sie "gepusht" haben.
quelle
Ich bin mir nicht sicher, wie nützlich dies in einer Batchdatei sein würde , aber es ist ein sehr praktischer Befehl, der in der Eingabeaufforderung verwendet werden kann:
Dadurch wird der Windows Explorer im Ordner "some_directory" geöffnet.
Ich habe festgestellt, dass dies eine große Zeitersparnis ist.
quelle
open .
tun Sie dasselbe.start
macht weit mehr als nur den aktuellen Ordner zu öffnen. Sie können jede Datei übergeben und sie wird mit dem konfigurierten Viewer geöffnet. Geben Sie ihm eine URL und Ihr Standardbrowser wird geöffnet, etc ...Ich fand es immer schwierig, Kommentare zu lesen, die in jeder Zeile mit einem Schlüsselwort gekennzeichnet sind:
Einfacher zu lesen:
quelle
rem
ein dokumentiertes Schlüsselwort ist, während::
es sich nur um ein Implementierungsdetail handelt. Obwohl es unwahrscheinlich ist, dass dies::
nicht mehr funktioniert, ist es im Allgemeinen ratsam, sich nicht auf undokumentiertes Verhalten zu verlassen.goto :
zum Etikett springen.:-)
undgoto -)
wird auch funktionieren.Variable Teilzeichenfolgen:
quelle
for %a in ...
) kombiniert werden kann, da sie nicht das schließende Prozentzeichen benötigen, wie dies auch Umgebungsvariablen tun. Sie müssen sie zuerst einer Umgebungsvariablen zuweisen (mit verzögerter Erweiterung!) und dann einen Teilstring extrahieren.Der FOR-Befehl ! Obwohl ich es hasse, Batch-Dateien zu schreiben, bin ich dafür dankbar.
würde jede Zeile in myfile.txt analysieren, Zeilen ignorieren, die mit einem Semikolon beginnen, und das 2. und 3. Token von jeder Zeile an den for-Body übergeben, wobei Token durch Kommas und / oder Leerzeichen getrennt sind. Beachten Sie, dass die for body-Anweisungen auf% i verweisen, um das 2. Token zu erhalten,% j, um das 3. Token zu erhalten, und% k, um alle verbleibenden Token nach dem 3. Token zu erhalten.
Sie können dies auch verwenden, um Verzeichnisse, Verzeichnisinhalte usw. zu durchlaufen.
quelle
Anstatt ein Skript mit REM- oder :: -Linien zu verunreinigen, mache ich oben in jedem Skript Folgendes:
Beachten Sie, wie Sie die Pipe- und Umleitungszeichen verwenden können, ohne sie zu umgehen.
quelle
Der Pfad (mit Laufwerk), in dem sich das Skript befindet: ~ dp0
quelle
Das Stück% ~ dp0 wurde bereits erwähnt, aber es steckt tatsächlich noch mehr dahinter: Die Zeichen nach dem ~ definieren die Informationen, die extrahiert werden.
Kein Buchstabe führt zur Rückgabe des Patch-Dateinamens
d - gibt den Laufwerksbuchstaben
p zurück - gibt den Pfad
s zurück - gibt den kurzen Pfad
x zurück - gibt die Dateierweiterung zurück
Wenn Sie also das folgende Skript test.bat aus c: \ Temp ausführen \ langer Verzeichnisname \ Ordner,
Sie erhalten die folgende Ausgabe
Und wenn ein Parameter wie in
Test c: \ temp \ mysrc \ test.cpp an Ihr Skript übergeben wird
, können dieselben Manipulationen mit der Variablen% 1 durchgeführt werden.
Das Ergebnis der Erweiterung von% 0 hängt jedoch vom Standort ab!
Auf der "obersten Ebene" des Stapels wird es auf den aktuellen Stapeldateinamen erweitert.
In einer Funktion (Aufruf) wird sie auf den Funktionsnamen erweitert.
Die Ausgabe ist (die Batchdatei wird mit myBatch.bat gestartet)
quelle
Mit CALL, EXIT / B, SETLOCAL & ENDLOCAL können Sie Unterprogramme mit lokalen Variablen implementieren.
Beispiel:
Dies wird gedruckt
obwohl: sub modifiziert x.
quelle
Ein hinterhältiger Trick, um N Sekunden zu warten (nicht Teil von cmd.exe, aber keine zusätzliche Software, da es mit Windows geliefert wird), siehe Ping-Zeile. Sie benötigen N + 1 Pings, da der erste Ping ohne Verzögerung erlischt.
quelle
Dem "Sanitär" entkommen:
quelle
HEAD^
ist es problematisch , git unter Windows zu verwenden, um sich vom vorherigen commit ( ) zu unterscheiden.In der Lage sein, Befehle auszuführen und die Ausgabe zu verarbeiten (wie Backticks von '$ ()' in Bash).
Wenn die Dateinamen Leerzeichen enthalten, verwenden Sie Folgendes:
quelle
Leere Datei erstellen:
quelle
type nul > filename.ext
dafür.ren > blah.txt
Um alle Ausgaben eines Befehls auszublenden, leiten Sie zu> nul 2> & 1 um.
Beispielsweise zeigen einige Befehlszeilenprogramme die Ausgabe auch dann an, wenn Sie zu> nul umleiten. Wenn Sie die Ausgabe jedoch wie in der folgenden Zeile umleiten, wird die gesamte Ausgabe unterdrückt.
BEARBEITEN: Eine Erläuterung der Funktionsweise finden Sie unter Ignorieren der Ausgabe eines Befehls .
quelle
taskkill
.Stoppt die Ausführung und zeigt die folgende Eingabeaufforderung an:
Nützlich, wenn Sie einen Stapel ausführen möchten, indem Sie im Windows Explorer darauf doppelklicken, und die Ausgabe tatsächlich anzeigen möchten, anstatt nur das Befehlsfenster zu blinken.
quelle
echo.|batch-with-pause.bat
hat den gleichen Effekt wie das Drücken der ' Any -Taste' ...Das Äquivalent der Bash (und anderer Muscheln)
welches "
Hello
" ohne nachgestellten Zeilenumbruch ausgibt. Ein cmd-Hack, um dies zu tun:set /p
ist eine Möglichkeit, den Benutzer zur Eingabe aufzufordern. Es gibt die angegebene Zeichenfolge aus und wartet dann (in derselben Zeile, dh ohne CRLF), bis der Benutzer eine Antwort eingibt.<nul
leitet einfach eine leere Antwort an die weiterset /p
Befehl weiter, sodass das Nettoergebnis die ausgegebene Eingabeaufforderungszeichenfolge ist. (Die verwendete Variable bleibt aufgrund der leeren Antwort unverändert.)Probleme sind: Es ist nicht möglich, ein führendes Gleichheitszeichen auszugeben, und unter Vista werden führende Leerzeichen entfernt, jedoch nicht unter XP.
quelle
Suchen und Ersetzen beim Festlegen von Umgebungsvariablen:
... entfernt das "/" von einem Datum zur Verwendung in Dateinamen mit Zeitstempel.
und Teilzeichenfolgen auch ...
quelle
Ganzzahlige Arithmetik:
quelle
Befehlstrennzeichen:
In der zweiten Zeile wird der Befehl nach && nur ausgeführt, wenn der erste Befehl erfolgreich ist.
In der 3. Zeile der Befehl nach || Wird nur ausgeführt, wenn der erste Befehl fehlgeschlagen ist.
quelle
Leere Zeile ausgeben:
quelle
Sie können if-Anweisungen verketten, um einen Effekt wie ein kurzgeschlossenes boolesches `und 'zu erzielen.
quelle
if foo ( if bar ( baz ) )
(Stellen Sie sich Zeilenumbrüche nach den Klammern vor.)So konvertieren Sie schnell eine Unicode-Textdatei (16 Bit / Zeichen) in eine ASCII-DOS-Datei (8 Bit / Zeichen).
Als Bonus werden die Charaktere nach Möglichkeit korrekt zugeordnet.
quelle
wenn Blockstruktur:
quelle
%ERRORLEVEL%
sowieso nicht verwenden ; dafürif errorlevel <foo>
ist es da. Und das funktioniert tatsächlich in solchen Blöcken.Verzögerte Erweiterung von Variablen (wobei Teilzeichenfolgen für ein gutes Maß eingeworfen werden):
quelle
Bietet nicht viele Funktionen, aber Sie können den Befehl title für einige Zwecke verwenden, z. B. zum Bereitstellen des Status eines langen Skripts in der Taskleiste oder nur zum Verbessern des Benutzerfeedbacks.
quelle
Sie haben keinen Editor zur Hand und müssen eine Batch-Datei erstellen?
Geben Sie einfach die Befehle ein und drücken Sie die Eingabetaste, um eine neue Zeile zu erhalten. Drücken Sie Strg-Z und die Eingabetaste, um die Datei zu schließen.
quelle
Beispiel für die Subtraktion von Zeichenfolgen
date
undtime
zum Abrufen der Datei "JJJJ-MM-TT HH: MM: SS.txt"Ich gebe
color
an, ob mein Skript erfolgreich ist, fehlgeschlagen ist oder eine Eingabe benötigt, indem ich die Farbe von Text und Hintergrund ändere. Es ist wirklich hilfreich, wenn Sie eine Maschine in Reichweite haben, aber ziemlich weit wegDabei ist X und Y ein Hex-Wert von
0
bisF
, wobei X-Hintergrund, Y-Text, wenn sich die Farbe X = Y nicht ändert.Ändert die Textfarbe in 'Z' und setzt den schwarzen Hintergrund, 'Farbe 0' funktioniert nicht
Für Namen von Farben rufen Sie an
quelle
Vollständige Kontrolle über die Ausgabe mit Abstands- und Escapezeichen.:
quelle
TheSoftwareJedi hat den Befehl for bereits erwähnt, aber ich werde ihn noch einmal erwähnen, da er sehr leistungsfähig ist.
Im Folgenden wird das aktuelle Datum im Format JJJJMMTT ausgegeben. Ich verwende dies beim Generieren von Verzeichnissen für Sicherungen.
quelle