Stapeldatei
![]() | |
Dateiname -Erweiterungen | .Schläger , .cmd , .BTM |
---|---|
Internet -Medientyp |
|
Art des Formats | Scripting |
Container für | Skripte |
A Stapeldatei ist ein Skriptdatei in DOS, OS/2 und Microsoft Windows. Es besteht aus einer Reihe von einer Reihe von Befehle von der ausgeführt werden Befehlszeilen-Interpreter, in einem gespeichert einfacher Text Datei. Eine Stapeldatei kann einen beliebigen Befehl enthalten, den der Interpreter interaktiv akzeptiert und Konstrukte verwendet WENN
, ZUM
, und GEHE ZU
Etiketten. Der Begriff "Batch" stammt von Stapelverarbeitung, was "nicht interaktive Ausführung" bedeutet, obwohl eine Stapeldatei möglicherweise nicht verarbeitet wird Charge von mehreren Daten.
Ähnlich zu Arbeitskontrollsprache (Jcl), DCL und andere Systeme auf Mainframe- und Minicomputer -Systemen wurden Stapeldateien hinzugefügt, um die für bestimmten regulären Aufgaben erforderlichen Arbeiten zu erleichtern, indem der Benutzer ein Skript einrichten kann, um diese zu automatisieren. Wenn eine Stapeldatei ausgeführt wird, ist die Hülse Programm (normalerweise Command.com oder cmd.exe) liest die Datei und führt ihre Befehle aus, normalerweise line-by-line.[1] Unix-artig Betriebssysteme, wie zum Beispiel Linux, haben eine ähnliche, aber flexiblere Art der Datei namens a Shell-Skript.[2]
Das Dateiname Erweiterung .Schläger wird in DOS und Fenstern verwendet. Windows NT und OS/2 auch hinzugefügt .cmd. Stapeldateien für andere Umgebungen können unterschiedliche Erweiterungen aufweisen, z. B.. .BTM in 4dos, 4OS2 und 4nt Verwandte Muscheln.
Die detaillierte Handhabung von Batch -Dateien hat sich zwischen den Versionen erheblich geändert. Einige der Details in diesem Artikel gelten für alle Stapeldateien, während andere Details nur für bestimmte Versionen gelten.
Varianten
DOS
In DOS kann eine Chargendatei aus dem gestartet werden Befehlszeilenschnittstelle Durch Eingeben seines Namens, gefolgt von allen erforderlichen Parametern und Drücken des Namens ↵ Geben Sie ein Schlüssel. Wenn DOS geladen wird, ist die Datei Autoexec.batWenn vorhanden, wird automatisch ausgeführt, sodass alle Befehle ausgeführt werden müssen, um die DOS -Umgebung einzurichten, können in dieser Datei platziert werden. Computerbenutzer haben die autoexec.bat -Datei das Systemdatum und die Zeitpunkt, die DOS -Umgebung einrichten, die ansässigen Programme oder Gerätefahrer laden oder Netzwerkverbindungen und -zuweisungen initialisieren.
Eine Erweiterung der Dateinamenname identifiziert eine Datei mit Befehlen, die vom Befehlsinterpreter ausgeführt werden Command.com Zeile für Zeile, als wäre es eine Liste der manuell eingegebenen Befehle mit einigen zusätzlichen Batch-file-spezifischen Befehlen für grundlegende Programmierfunktionen, einschließlich eines GEHE ZU
Befehl zum Ändern des Flusses der Zeilenausführung.
Frühe Fenster
Microsoft Windows wurde 1985 als grafische Benutzeroberfläche-basierend (GUI) Überlagerung auf textbasiertem textbasiertem Betriebssysteme und wurde entwickelt, um auf DOS zu laufen. Um es zu starten, die GEWINNEN
Der Befehl wurde verwendet, der zum Ende der hinzugefügt werden konnte Autoexec.bat Datei, damit das automatische Laden von Fenstern das Laden von Windows ermöglicht. In den früheren Versionen könnte man eine .bat-Type von Windows in der MS-DOS-Eingabeaufforderung ausführen. Windows 3.1x und früher ebenso wie Windows 9x aufgerufene command.com, um Stapeldateien auszuführen.
OS/2
Das IBM OS/2 Betriebssystem unterstützte Stapeldateien im DOS-Stil. Es enthielt auch eine Version von Rexx, eine fortgeschrittenere Batch-Datei Skriptsprache. IBM und Microsoft begannen mit der Entwicklung dieses Systems, lösten sich jedoch nach einem Streit auf. Infolgedessen bezog sich IBM auf ihre dos-ähnliche Konsolenhülle, ohne Microsoft zu erwähnen, und benannte sie nur DOS, obwohl dies anscheinend keinen Unterschied in Bezug auf die Art und Weise, wie Batch-Dateien von command.com gearbeitet haben, keinen Unterschied gemacht hat.
Der Batch -Datei -Interpreter von OS/2 unterstützt auch einen EXTPROC -Befehl. Dadurch wird die Stapeldatei an das in der EXTPROC -Datei als Datendatei benannte Programm übergeben. Das benannte Programm kann eine Skriptdatei sein. Dies ähnelt dem #! Mechanismus verwendet von Unix-artig Betriebssysteme.
Windows NT
nicht wie Windows 98 und früher die Windows NT Die Familie von Betriebssystemen hängt nicht von MS-DOS ab. Windows NT führte einen erweiterten 32-Bit-Befehlsinterpreter vor (cmd.exe) Das könnte Skripte mit der Erweiterung .cmd oder .bat ausführen. Cmd.exe fügte zusätzliche Befehle hinzu und implementierte vorhandene auf etwas andere Weise, sodass dieselbe Chargendatei (mit unterschiedlicher Erweiterung) unterschiedlich mit cmd.exe und command.com funktioniert. In den meisten Fällen ist der Betrieb identisch, wenn die wenigen nicht unterstützten Befehle nicht verwendet werden. Die Erweiterungen von cmd.exe an command.com können für die Kompatibilität deaktiviert werden.
Microsoft veröffentlichte eine Version von CMD.exe für Windows 9x und ME namens Win95CMD, damit Benutzer älterer Windows-Versionen bestimmte Stapeldateien im CMD.EXE-Stil verwenden können.
Ab Windows 8[aktualisieren]CMD.EXE ist der normale Befehlsinterpreter für Stapeldateien. Der ältere Kommando.com kann auch in 32-Bit-Versionen von Windows ausgeführt werden, um 16-Bit-Programme auszuführen.[NB 1]
Dateiname -Erweiterungen
- .Schläger
- Die erste Dateiname -Erweiterung von verwendet von Microsoft Für Stapeldateien. Diese Erweiterung wird mit DOS und allen Versionen von Windows unter command.com oder cmd.exe ausgeführt, obwohl die beiden Befehlsinterpreten Stapeldateien ausführen.
- .cmd
- Wird für Stapeldateien in verwendet Windows NT Familie und zur Interpretation an cmd.exe gesendet. Command.com erkennt diese Dateinamenweiterung nicht, sodass CMD.exe -Skripte versehentlich in der falschen Windows -Umgebung ausgeführt werden. Zusätzlich,
anhängen
,DPDE
,ftype
,einstellen
,Weg
,Assoc
undprompt
Befehle, wenn sie aus einer .bat -Datei ausgeführt werden, ändern Sie den Wert des Werts derFehlerlevel
Variable nur bei einem Fehler, während sie aus einer .cmd -Datei auch bei der Rückkehr ohne Fehler beeinflussen würden.[3] Es wird auch von IBMs Betriebssystem für Stapeldateien verwendet. - .BTM
- Die Erweiterung verwendet von 4dos, 4OS2, 4nt und Übernehme das Kommando. Diese Skripte sind schneller, insbesondere bei längeren, da das Skript eher für die Ausführung als zeile für die Ausführung geladen wird.[4]
Batch -Dateiparameter
Command.com und cmd.exe unterstützen spezielle Variablen (%0
, %1
durch %9
) um sich auf den Pfad und den Namen der zu beziehen Batch -Job und die ersten neun Anrufparameter innerhalb des Batch -Jobs siehe auch WECHSEL. Nicht existierende Parameter werden durch einen String mit Null-Länge ersetzt. Sie können ähnlich verwendet werden wie Umgebungsvariablen, werden aber nicht in der Umwelt gespeichert. Microsoft und IBM beziehen sich auf diese Variablen als Ersatzparameter oder Austauschbare Parameter, während digitale Forschung, Novell und Caldera den Begriff festgelegt haben Ersatzvariablen[5] für Sie. JP Software ruft sie an Batch -Dateiparameter.[6]
Beispiele
Diese Beispiel -Stapeldatei wird angezeigt Hallo Welt!
fordert und wartet darauf, dass der Benutzer eine Taste drückt und dann beendet. (Hinweis: Es spielt keine Rolle, ob Befehle in Kleinbuchstaben oder Großbuchstaben sind, es sei denn, sie arbeiten mit Variablen.)
@ECHO AUSECHO Hallo Welt!PAUSE
Um die Datei auszuführen, muss sie mit dem gespeichert werden Dateiname Erweiterung Suffix .bat (oder .cmd für Betriebssysteme vom Windows NT) im Klartextformat, das normalerweise mit einem Texteditor erstellt wurde, wie z. B. Microsoft Notepad oder ein Textverarbeitungssystem Arbeiten im klaren Textmodus.
Bei der Ausführung wird Folgendes angezeigt:
Hallo Welt! Drücken Sie eine beliebige Taste, um fortzufahren . . .
Erläuterung
Der Interpreter führt jede Zeile nacheinander aus, beginnend mit dem ersten. Das @
Das Symbol zu Beginn einer Zeile verhindert, dass die Eingabeaufforderung diesen Befehl so anzeigt, wie er ausgeführt wird. Der Befehl Abhauen
schaltet die Eingabeaufforderung dauerhaft aus oder bis sie wieder eingeschaltet ist. Das kombiniert @Echo aus
ist oft wie hier die erste Zeile einer Stapeldatei, die verhindern, dass Befehle angezeigt werden. Dann wird die nächste Zeile ausgeführt und die Echo Hallo Welt!
Befehlsausgänge Hallo Welt!
. Die nächste Zeile wird ausgeführt und die PAUSE
Befehl zeigt an Drücken Sie eine beliebige Taste, um fortzufahren . . .
und pausiert die Ausführung des Skripts. Nachdem eine Taste gedrückt wurde, endet das Skript, da es keine Befehle mehr gibt. In Windows, wenn das Skript aus einem bereits ausgeführten Ausgang ausgeführt wird Eingabeaufforderung Fenster bleibt das Fenster an der Eingabeaufforderung wie in MS-DOS geöffnet. Ansonsten schließt das Fenster bei der Kündigung.
Einschränkungen und Ausnahmen
Nullwerte in Variablen
Variable Erweiterungen werden textuell in den Befehl eingesetzt, und somit Variablen, die nichts enthalten, verschwinden einfach aus der Syntax, und Variablen, die Räume enthalten, verwandeln sich in mehrere Token. Dies kann zu Syntaxfehlern oder Fehler führen.
Wenn beispielsweise % foo % leer ist, ist diese Aussage:
WENN %foo%==Bar ECHO Gleich
Parsen als fehlerhaftes Konstrukt:
WENN == Bar Echo gleich
In ähnlicher Weise, wenn %foo%
enthält ABC def
, dann resultiert ein anderes Syntaxfehler:
WENN ABC def==Bar ECHO Gleich
Die übliche Möglichkeit, dieses Problem zu verhindern Wenn "" == "Bar"
statt der Ungültigen If == bar
. Der Text, der mit der Variablen verglichen wird, muss ebenfalls in Zitate eingeschlossen sein, da die Zitate keine besondere Abgrenzungssyntax sind. Diese Charaktere repräsentieren sich.
WENN "%foo%"=="Bar" ECHO Gleich
Die verspätete! Variable! Die in Windows 2000 verfügbare Erweiterung kann verwendet werden, um diese syntaktischen Fehler zu vermeiden. In diesem Fall scheitern Null- oder Multi-Wörter-Variablen nicht syntaktisch, da der Wert nach dem Analyse des IF-Befehls erweitert wird:
WENN ! foo!==Bar ECHO Gleich
Ein weiterer Unterschied in Windows 2000 oder höher besteht darin, dass eine leere Variable (undefiniert) nicht ersetzt wird. Wie in früheren Beispielen beschrieben, hätte früheres Batch -Interpreter -Verhalten zu einer leeren Zeichenfolge geführt. Beispiel:
C: \>einstellen Myvar= C: \>Echo %Myvar% %Myvar% C: \>wenn "%Myvar%"=="" " (Echo Myvar ist nicht definiert) anders (Echo Myvar ist %Myvar%) Myvar ist %myvar %
Batch -Dolmetscher vor Windows 2000 hätten das Ergebnis angezeigt Myvar ist nicht definiert
.
Anführungszeichen und Räume in bestandenen Saiten
Im Gegensatz zu UNIX/POSIX-Prozessen, die ihre Befehlszeilenargumente erhalten, die bereits von der Shell in eine Reihe von Zeichenfolgen aufgeteilt sind, empfängt ein Windows-Prozess die gesamte Befehlszeile als einzelne Zeichenfolge über die GetCommandline API -Funktion. Infolgedessen kann jede Windows -Anwendung eine eigene implementieren Parser Um die gesamte Befehlszeile in Argumente aufzuteilen. Viele Anwendungen und Befehlszeilen-Tools haben dafür ihre eigene Syntax entwickelt, und daher gibt es keine einzige Konvention, um zu zitieren oder zu entkommen Metacharaccters Unter Windows -Befehlszeilen.
- Für einige Befehle werden Leerzeichen als Grenzwerte behandelt, die Argumente getrennt sind, es sei denn, diese Räume sind von Anführungszeichen eingeschlossen. Es gibt verschiedene Konventionen, wie Anführungszeichen an den Antrag weitergegeben werden können:
- Eine weit verbreitete Konvention wird von implementiert von Der in der Microsoft Visual C ++-Laufzeitbibliothek integrierte Befehlszeilenparser integriert in dem Commandlinetoargvw Funktion. Es verwendet die Konvention, dass 2n Backslashes, gefolgt von einem Anführungszeichen (") produzieren n Backslashes gefolgt von einem Start/End -Zitat, während (2)n) +1 Backslashes, gefolgt von einem Anführungszeichen, erzeugen erneut n Backslashes, gefolgt von einem Anführungszeichen wörtlich. Die gleiche Konvention ist Teil der .NET Framework Spezifikation.[7]
- Ein undokumentierter Aspekt ist das "" " Das Auftreten in der Mitte einer zitierten Zeichenfolge erzeugt ein einzelnes Zitatzeichen.[7] (Eine CRT -Änderung im Jahr 2008 [MSVCR90] hat diese undokumentierte Handhabung von Zitaten verändert.[8]) Dies ist hilfreich, um eine Zitatmarke in ein Argument einzuführen, ohne die Interpretation von CMD |, & und >. (CMD erkennt das Übliche nicht \ " als Flucht aus dem Zitat. Es wird diese besonderen Bedeutungen zum Sehen des Zitats wieder angelegt und denken, dass das Zitat beendet ist.)
- Eine andere Konvention ist, dass ein einzelner Zitatzeichen ( ") ist nicht als Teil der Zeichenfolge enthalten. Eine entkommene Zitatmarke jedoch ( "" ") kann Teil der Zeichenfolge sein.
- Eine weitere gemeinsame Konvention ergibt sich aus der Verwendung von Cygwin-Elendes portierte Programme. Es unterscheidet sich nicht zwischen den Backslashes, die vor oder nicht vor Anführungszeichen auftreten oder nicht. Sehen Glob (Programmierung) § Windows und DOS Informationen zu diesen alternativen Befehlszeilenparsern.[9]
- Einige wichtige Windows -Befehle wie
cmd.exe
undwscript.exe
Verwenden Sie ihre eigenen Regeln.[8]
- Eine weit verbreitete Konvention wird von implementiert von Der in der Microsoft Visual C ++-Laufzeitbibliothek integrierte Befehlszeilenparser integriert in dem Commandlinetoargvw Funktion. Es verwendet die Konvention, dass 2n Backslashes, gefolgt von einem Anführungszeichen (") produzieren n Backslashes gefolgt von einem Start/End -Zitat, während (2)n) +1 Backslashes, gefolgt von einem Anführungszeichen, erzeugen erneut n Backslashes, gefolgt von einem Anführungszeichen wörtlich. Die gleiche Konvention ist Teil der .NET Framework Spezifikation.[7]
- Für andere Befehle werden Leerzeichen nicht als Grenzwerte behandelt und benötigen daher keine Anführungszeichen. Wenn Zitate enthalten sind, werden sie Teil der Zeichenfolge. Dies gilt für einige integrierte Befehle wie Echo.
Wenn eine Zeichenfolge Anführungszeichen enthält und in eine andere Textlinie eingefügt werden soll, die ebenfalls in Anführungszeichen eingeschlossen sein muss, ist besondere Aufmerksamkeit für den Anführungsmechanismus erforderlich:
C: \>einstellen Foo="Diese Zeichenfolge ist in Anführungszeichen eingeschlossen" C: \>Echo "Test 1 %foo%" "Test 1" Diese Zeichenfolge ist in Anführungszeichen eingeschlossen "" " C: \>Eventcreate /T Warning /ID 1 /l System /SO "Quelle" /D "Beispiel: %foo%" Fehler: Ungültiges Argument/Option - 'String'. Geben Sie "Eventcreate /?" für die Verwendung.
Unter Windows 2000 und später besteht die Lösung darin, jedes Auftreten eines Zitatzeichens innerhalb eines Wertes durch eine Reihe von drei Zitatzeichen zu ersetzen:
C: \>einstellen Foo="Diese Zeichenfolge ist in Zitate eingeschlossen" C: \>einstellen Foo=%foo: "=" ""% C: \>Echo "Test 1 %foo%" "Test 1" "" Diese Zeichenfolge ist in Zitate "" "" "" " C: \>Eventcreate /T Warning /ID 1 /l System /SO "Quelle" /D "Beispiel: %foo%" Erfolg: Ein "Warn" -Typ -Ereignis wird in der "Quell" -Protokoll/Quelle erstellt.
Entkommene Charaktere in Saiten
Einige Zeichen wie Pipe (|
) Zeichen, haben eine besondere Bedeutung für die Befehlszeile. Sie können nicht als Text mit dem gedruckt werden ECHO Befehl, es sei denn, mit dem Caret ^ -Symbol entkommen:
C: \>Echo Foo | Bar'Bar' wird nicht als interner oder externer Befehl anerkannt, Betriebsprogramm oder Stapeldatei. C: \>Echo Foo ^| Barfoo | Bar
Das Flucht funktioniert jedoch nicht wie erwartet, wenn der entkommene Charakter in eine Umgebungsvariable eingefügt wird. Die Variable enthält einen Live -Rohrbefehl, wenn er nur wiederholt. Es ist notwendig, sowohl der Pflege selbst als auch dem entkommenen Zeichen für die Zeichenanzeige als Text in der Variablen zu entkommen:
C: \>einstellen Foo=Bar | Baz'Baz' wird nicht als interner oder externer Befehl anerkannt, Betriebsprogramm oder Stapeldatei. C: \>einstellen Foo=Bar ^| BarC: \>Echo %foo% 'Baz' wird nicht als interner oder externer Befehl anerkannt, Betriebsprogramm oder Stapeldatei. C: \>einstellen Foo=Bar ^^^ | BazC: \>Echo %foo% Bar | Baz
Die verzögerte Erweiterung, die mit oder mit Windows 2000 verfügbar ist und später verwendet werden kann, um Sonderzeichen anzuzeigen, die in Umgebungsvariablen gespeichert sind, da der variable Wert nach dem Analyse des Befehls erweitert wird:
C: \>cmd /v: aufMicrosoft Windows [Version 6.1.7601] Copyright (C) 2009 Microsoft Corporation. Alle Rechte vorbehalten. C: \>einstellen Foo=Bar ^| BazC: \>Echo ! foo! Bar | Baz
Schlaf- oder Skriptverzögerung
Bis der Timeout -Befehl mit Windows Vista eingeführt wurde, gab es keine einfache Möglichkeit, eine zeitgesteuerte Pause zu implementieren, da der Befehl pause die Skriptaktivität auf unbestimmte Zeit einstellt, bis eine Taste gedrückt wird.
Viele Problemumgehungen waren möglich,[10] aber im Allgemeinen funktionierte nur in einigen Umgebungen: die AUSWAHL
Der Befehl war in älteren DOS -Versionen nicht verfügbar, KLINGELN
war nur verfügbar, wenn TCP/IP installiert wurde und so weiter. Bei Microsoft war keine Lösung verfügbar, aber eine Reihe kleiner Versorgungsprogramme konnten aus anderen Quellen installiert werden. Ein kommerzielles Beispiel wäre die Norton -Versorgungsunternehmen von 1988 Batch Enhancer (Be) Befehl, wo Verzögerung 18 sein
Würde auf 1 Sekunde oder die kostenlose 94-Byte-Wait.com warten[11] wo Warten Sie 5
Ich würde 5 Sekunden warten und dann die Kontrolle zum Skript zurückgeben. Die meisten dieser Programme sind 16-Bit-.com-Dateien und sind also mit 64-Bit-Fenstern nicht kompatibel.
Textausgabe mit gestreiftem CR/LF
Normalerweise enthält alle gedruckten Text automatisch die Steuerzeichen für die Steuerzeichen Kutschenrückkehr (Cr) und Zeilenvorschub (Lf) an das Ende jeder Zeile angehängt.
- batchtest.bat
@Echo Foo@Echo Bar
C: \>batchtest.batFoo Bar
Es spielt keine Rolle, ob die beiden Echo -Befehle dieselbe Befehlszeile teilen. Die CR/LF -Codes werden eingefügt, um die Ausgabe auf separate Zeilen zu unterteilen:
C: \>@Echo Nachricht 1&@Echo Nachricht 2Nachricht 1 Nachricht 2
Ein Trick, der mit Windows 2000 entdeckt wurde und später die spezielle Eingabeaufforderung für Eingaben zum Ausgabe von Text verwenden kann, ohne dass Cr/LF den Text verlässt. In diesem Beispiel folgt die CR/LF Meldung 1 nicht, sondern folgt Zeile 2 und Zeile 3:
- batchtest2.bat
@Echo auseinstellen /p ="Nachricht 1"<nulEcho Nachricht 2Echo Nachricht 3
C: \>batchtest2.batNachricht 1Message 2 Nachricht 3
Dies kann verwendet werden, um Daten in eine Textdatei ohne am Ende angehängte CR/LF auszugeben:
C: \>einstellen /p ="Nachricht 1"<nul >Data.txtC: \>einstellen /p ="Nachricht 2"<nul >>Data.txtC: \>einstellen /p ="Nachricht 3"<nul >>Data.txtC: \>Typ Data.txtNachricht 1Message 2Message 3
Es gibt jedoch keine Möglichkeit, diese gestreifte CR/LF -Eingabeaufforderung direkt in eine Umgebungsvariable zu injizieren.
Einheitliche Benennungskonvention (UNC) Arbeitsverzeichnis aus einer Verknüpfung
Es ist nicht möglich, eine Eingabeaufforderung zu haben, die a verwendet UNC Pfad als aktuelles Arbeitsverzeichnis; z.B. \\ Server \ Share \ Verzeichnis \
Die Eingabeaufforderung erfordert die Verwendung von Laufwerksbuchstaben, um ein Arbeitsverzeichnis zuzuweisen, wodurch komplexe Stapeldateien auf einem Server -UNC -Freigeben ausgeführt werden. Während eine Stapeldatei von einem UNC -Dateipfad aus ausgeführt werden kann, ist das Standardverzeichnis Standardeinsatz C: \ Windows \ System32 \
.
In Windows 2000 und später ist eine Problemumgehung die Verwendung der Verwendung PUSHD
und POPD
Befehl mit Befehlserweiterungen.[NB 2]
Wenn dies standardmäßig nicht aktiviert ist, können Befehlsweiterungen vorübergehend aktiviert werden, indem Sie das verwenden /E:ON
Wechseln Sie für den Befehlsinterpreter.
Um also eine Stapeldatei auf einer UNC -Freigabe auszuführen, weisen Sie der UNC -Freigabe einen temporären Laufwerksbriefe zu und verwenden Sie die UNC -Freigabe als Arbeitsverzeichnis der Batch -Datei, eine Windows -Verknüpfung kann konstruiert werden, die so aussieht:
- Ziel:
Das Arbeitsverzeichnisattribut dieser Verknüpfung wird ignoriert.
Dies löst auch ein Problem im Zusammenhang mit Benutzerkontensteuerung (UAC) auf Windows Vista und neuer. Wenn ein Administrator angemeldet ist und UAC aktiviert ist und versucht, eine Stapeldatei als Administrator aus einem Netzwerkantriebsbuchstaben auszuführen, wird der Vorgang unerwartet fehlgeschlagen. Dies liegt daran, dass der Kontext des erhöhten UAC -Kontens keine Netzwerkantriebsbuchstaben aufweist und es nicht möglich ist, Laufwerksbuchstaben für den erhöhten Kontext über die Explorer -Shell- oder Anmeldungsskripte zuzuweisen. Durch das Erstellen einer Abkürzung zur Stapeldatei mithilfe der oben genannten PUSHD
/ POPD
Konstruieren und mit der Verknüpfung zum Ausführen der Stapeldatei als Administrator wird der temporäre Laufwerksbuchstaben im erhöhten Kontokontext erstellt und entfernt, und die Stapeldatei funktioniert korrekt.
Die folgende Syntax erweitert korrekt auf den Pfad des aktuellen Stapel -Skripts.
%~ dp0
Die UNC -Standardpfade werden standardmäßig ausgeschaltet, da sie früher ältere Programme zum Absturz bringen.[12]
Der DWORD -Registrierungswert Deaktivieren
bei HKEY_CURRENT_USER \ Software \ Microsoft \ Befehlsprozessor
[12] Ermöglicht das Standardverzeichnis Unc. CD
Der Befehl weigert sich zu ändern, aber ein UNC -Pfad in ein Standardverzeichnis in einer Verknüpfung zu CMD oder mithilfe des Befehls start. (C$
Aktie ist für Administratoren).
Zeichensatz
Stapeldateien verwenden einen OEM -Zeichensatz, wie vom Computer definiert, z. Code Seite 437. Die Nicht-ASCII-Teile davon sind mit dem unvereinbar Unicode oder Windows -Zeichensätze Ansonsten muss in Windows verwendet werden, damit darauf geachtet werden muss.[13] Nicht-englische Dateinamen funktionieren nur, wenn sie über einen DOS-Charakter-Set-kompatiblen Editor eingegeben wurden. Dateinamen mit Zeichen außerhalb dieses Sets funktionieren nicht in Stapeldateien.
Um eine Eingabeaufforderung mit Unicode anstelle von Code zu erhalten, kann man die verwenden cmd /u
Befehl. In einer solchen Eingabeaufforderung funktioniert eine Stapeldatei mit Unicode -Dateinamen. Auch man kann verwenden cmd /u
Um Befehle direkt mit Unicode als Zeichensatz auszuführen. Zum Beispiel, cmd /u /c dir> files.txt
Erstellt eine Datei mit einer Verzeichnisauflistung mit korrekten Windows -Zeichen in der UTF-16Le Codierung.
Stapelviren und Malware
Wie bei jeder anderen Programmiersprache können Stapeldateien böswillig verwendet werden. Einfach Trojaner und Gabelbomben werden leicht erstellt und Batch -Dateien können eine Form von ausführen DNS -Vergiftung Durch Ändern der Hosts Datei. Stapelviren sind möglich und können sich auch über durch USB -Flash -Laufwerke durch Verwendung von Windows ' Autorun Fähigkeit.[14]
Der folgende Befehl in einer Stapeldatei löscht alle Daten im aktuellen Verzeichnis (Ordner) - ohne zuerst nach Bestätigung zu fragen:
del /Q *.*
Diese drei Befehle sind einfach Gabelbombe Dies repliziert sich ständig, um die verfügbaren Systemressourcen zu erschöpfen und das System zu verlangsamen oder zu stürzen:
:OBEN Anfang "" " %0 gehe zu OBEN
Andere Windows -Skriptsprachen
Der Befehlsprozessor cmd.exe, der .CMD-Dateien interpretiert wird, wird in allen 32- und 64-Bit-Versionen von Windows bis mindestens Windows 10 unterstützt[aktualisieren]. Command.exe, das .bat-Dateien interpretiert, wurde in allen 16- und 32-Bit-Versionen bis mindestens Windows 10 unterstützt.[NB 3]
Für Windows stehen andere, spätere und leistungsfähigere Skriptsprachen zur Verfügung. Diese erfordern jedoch, dass der Skriptsprache -Interpreter installiert werden kann, bevor sie verwendet werden können:
- KIXTART (.kix) - entwickelt von einem Microsoft -Mitarbeiter im Jahr 1991, insbesondere um die Notwendigkeit von Befehlen zu erfüllen, die in einem Netzwerk -Anmeldeskript nützlich sind und gleichzeitig das einfache "Gefühl" einer .cmd -Datei beibehalten.
- Windows -Skript -Host (.VBS , .js und .wsf) - Veröffentlicht von Microsoft im Jahr 1998 und bestehend aus cscript.exe und wscript.exe, fährt Skripte in geschriebenen Skripten aus Vbscript oder Jscript. Es kann sie im Fenstermodus (mit dem WScript.exe-Host) oder im Konsolenmodus (mit dem Host von cscript.exe) ausgeführt werden. Sie sind seitdem ein Teil von Windows Windows 98.
- Power Shell (.ps1) - veröffentlicht 2006 von Microsoft und kann mit arbeiten Windows XP (SP2/SP3) und spätere Versionen. PowerShell kann sowohl interaktiv (von einer Befehlszeilenschnittstelle) als auch über gespeicherte Skripte betreiben und eine starke Ähnlichkeit mit Unix Muscheln.[15]
- Shell-Skriptsprachen im Unix-Stil können verwendet werden, wenn ein Unix-Kompatibilitäts-Tool wie z. Cygwin, ist installiert.
- Plattformübergreifend Skriptwerkzeuge einschließlich Perl, Python, Rubin, Rexx, Node.js und Php sind für Windows verfügbar.
Skriptdateien ausgeführt, wenn der Dateiname ohne Erweiterung eingegeben wird. Es gibt Vorrangsregeln für die Interpretation von beispielsweise, beispielsweise, Mach das
wenn Dothis.com
, Dothis.exe
, Dothis.bat
, Dothis.cmd
usw. existieren; standardmäßig Dothis.com
hat die höchste Priorität. Diese Standardreihenfolge kann in neueren Betriebssystemen durch die Benutzer-settierbar geändert werden PATHEXT Umgebungsvariable.
Siehe auch
Anmerkungen
- ^ Um zu überprüfen, ob command.com verfügbar bleibt (im Verzeichnis \ Windows \ System32), type
Command.com
Bei der 32-Bit-Windows 7-Eingabeaufforderung. - ^ "Wenn Befehlsweiterungen aktiviert sind, akzeptiert der Befehl Pushd zusätzlich zum normalen Laufwerksbuchstaben und Pfad Netzwerkpfade. Wenn ein Netzwerkpfad angegeben ist, erstellt Pushd einen temporären Laufwerksbuchstaben, der auf diese angegebene Netzwerkressource verweist, und ändern Sie dann das aktuelle Laufwerk und das aktuelle Laufwerk und das Verzeichnis. mit dem neu definierten Laufwerksbuchstaben. Temporäre Laufwerksbriefe werden aus Z: Ein Down mit dem ersten nicht verwendeten Laufwerksbuchstaben zugewiesen. " -Die Hilfe für Pushd in Windows 7
- ^ Die Verfügbarkeit von cmd.exe und command.com kann bestätigt werden, indem sie in jeder Version von Windows aufgerufen werden (command.com nicht in 64-Bit Programme).
Verweise
- ^ "Verwenden von Stapeldateien: Skriptung; Verwaltungsdienste". Technet.microsoft.com. 2005-01-21. Abgerufen 2012-11-30.
- ^ Henry-Stocker, Sandra (2007-07-18). "Verwenden Sie Ihre Unix -Skriptfähigkeiten, um eine Stapeldatei zu schreiben.". itworld.com. Es Welt. Abgerufen 2018-06-13.
- ^ "Unterschied zwischen BAT und CMD | WWOIT - Waynes Welt davon". Waynes-world-it.blogspot.fr. 2012-11-15. Abgerufen 2012-11-30.
- ^ "BTM -Dateierweiterung :: Alles über den .BTM -Dateityp". Cryer.co.uk. Abgerufen 2012-11-30.
- ^ Caldera DR-DOS 7.02 Benutzerhandbuch, Caldera, Inc., 1998 [1993, 1997], archiviert aus das Original Am 2016-11-05, abgerufen 2013-08-10
- ^ Brüder Hardin; Rawson, Tom; Conn, Rex C.; Paul, Matthias R.; Dye, Charles E.; Georgiev, Luchezar I. (2002-02-27). 4DOS 8.00 Online -Hilfe.
- ^ a b ".NET Core Runtime: System.diagnostics.process.unix". GitHub. Abgerufen 2020-02-11.
Zwei aufeinanderfolgende Doppelzitate in einer Inquotes -Region sollten zu einem buchstäblichen Doppelzitat führen (der Parser bleibt in der Inquotes -Region). Dieses Verhalten ist nicht Teil der Spezifikation des Code: ParseargumentsIntolist, sondern ist mit CRT- und .NET -Framework kompatibel.
- ^ a b Deley, David. "Wie Befehlszeilenparameter analysiert werden".
- ^ "Child Process -Dokumentation, Befehlszeile der Abschnitt Windows, NodeJS PR #29576". GitHub. Abgerufen 2020-02-11.
- ^ "Wie man eine Verzögerung durchführt", Ericphelps.com
- ^ Dienstprogramme für DOS, Verknüpfung mit Wait.zip (Archiv von Wait.com) und anderen Programmen
- ^ a b https://support.microsoft.com/en-us/kb/156276[Dead Link]
- ^ Chen, Raymond. "Behalten Sie die Codeseite im Auge". Microsoft.
- ^ http://www.explorehacking.com/2011/01/batch-files-artof-creating-virus.html
- ^ "Windows PowerShell - Unix kommt zu Windows". Geekswithblogs.net. Abgerufen 2012-11-30.
Externe Links
- Microsoft Windows XP -Batch -Dateireferenz
- Wie Windows -Batch -Dateien funktionieren
- Befehle mit Windows 10 -Batch -Dateien
- Freedos 'Freecom: Komplette Feature -Liste
- Windows -Befehlszeilen -Schnittstellen -Skript -Programmierlinks
- Skriptbezogene Informationen (auch Befehlszeile)
- Dbenham. "Wie analysiert der Windows -Befehlsinterpreter (CMD.exe) Skripte?". Paketüberfluss.
{{}}
: Fehlen oder leer|url=
(Hilfe)