Soweit ich weiß, .bat
ist dies die alte 16-Bit-Namenskonvention und .cmd
gilt für 32-Bit-Windows, dh beginnend mit NT. Aber ich sehe weiterhin überall .bat-Dateien, und sie scheinen mit beiden Suffixen genau gleich zu funktionieren. Unter der Annahme, dass mein Code niemals auf etwas älterem als NT ausgeführt werden muss, spielt es dann wirklich eine Rolle, wie ich meine Batch-Dateien benenne , oder wartet ein Gotcha auf mich, wenn ich das falsche Suffix verwende?
windows
batch-file
cmd
Chris Noe
quelle
quelle
Antworten:
Aus dieser Newsgroup-Veröffentlichung von Mark Zbikowski selbst:
Mit anderen Worten, wenn ERRORLEVEL auf ungleich 0 gesetzt ist und Sie dann einen dieser Befehle ausführen, lautet der resultierende ERRORLEVEL:
quelle
set var=..
Anweisung nicht (neu) festgelegt . Was seltsam ist, weil ich angenommen habe, dass das Verhalten erwartet wurde. Für beide könnten Argumente vorgebracht werden. Ich bleibe bei .bat-Dateien. :-)DPATH /?
der Befehl weiterhin als APPEND aufgeführt ist. Außerdem wurde der Wiki-Artikel inzwischen größtenteils korrigiert, außer dass DPATH nicht aufgeführt ist.Hier ist eine Zusammenstellung verifizierter Informationen aus den verschiedenen Antworten und zitierten Referenzen in diesem Thread:
command.com
ist der in MS-DOS eingeführte 16-Bit-Befehlsprozessor, der auch in der Win9x-Reihe von Betriebssystemen verwendet wurde.cmd.exe
ist der 32-Bit-Befehlsprozessor in Windows NT (64-Bit-Windows-Betriebssysteme haben auch eine 64-Bit-Version).cmd.exe
war nie Teil von Windows 9x. Es entstand in OS / 2 Version 1.0 und die OS / 2-Version voncmd
begann 16-Bit (war aber dennoch ein vollwertiges Programm im geschützten Modus mit Befehlen wiestart
). Windows NT wurdecmd
von OS / 2 geerbt , aber die Win32-Version von Windows NT wurde mit 32-Bit gestartet. Obwohl OS / 2 1992 auf 32-Bit umgestellt wurde,cmd
blieb es ein 16-Bit-OS / 2 1.x-Programm.ComSpec
env Variable definiert , welches Programm durch gestartet.bat
und.cmd
Skripten. (Beginnend mit WinNT ist dies standardmäßigcmd.exe
.)cmd.exe
ist abwärtskompatibel mitcommand.com
.cmd.exe
kann benannt werden.cmd
, um eine versehentliche Ausführung unter Windows 9x zu verhindern. Diese Dateinamenerweiterung stammt ebenfalls aus OS / 2 Version 1.0 und 1987.Hier ist eine Liste von
cmd.exe
Funktionen, die nicht unterstützt werden voncommand.com
:^
(Verwendung für:\ & | > < ^
)PUSHD
/POPD
SET /A i+=1
SET %varname:expression%
FOR /F
(existierte vorher, wurde erweitert)CALL :label
Ausführungsreihenfolge:
Wenn sich sowohl die .bat- als auch die .cmd-Version eines Skripts (test.bat, test.cmd) im selben Ordner befinden und Sie das Skript ohne die Erweiterung (test) ausführen, wird standardmäßig sogar die .bat-Version des Skripts ausgeführt unter 64-Bit-Windows 7. Die Ausführungsreihenfolge wird von der Umgebungsvariablen PATHEXT gesteuert. Siehe Reihenfolge, in der die Eingabeaufforderung Dateien ausführtWeitere Informationen finden .
Verweise:
wikipedia: Vergleich von Befehls-Shells
quelle
dir filename
ist das gleiche wiedir filename.*
in command.com; Der Platzhalter ist in cmd.exe erforderlich. In command.comrem Create an empty file > empty.txt
funktioniert; nicht in cmd.exe.Diese Antworten sind etwas zu lang und konzentrieren sich auf die interaktive Verwendung. Die wichtigen Unterschiede für die Skripterstellung sind:
.cmd
verhindert versehentliche Ausführung auf Nicht-NT-Systemen..cmd
Aktiviert integrierte Befehle, um die Fehlerstufe bei Erfolg auf 0 zu ändern.Nicht so aufregend, oder?
Früher waren in
.cmd
Dateien eine Reihe zusätzlicher Funktionen aktiviert , die als Befehlserweiterungen bezeichnet wurden. Sie sind jetzt jedoch standardmäßig sowohl für.bat
als auch für.cmd
Dateien unter Windows 2000 und höher aktiviert .Fazit: 2012 und darüber hinaus empfehle ich die
.cmd
ausschließliche Verwendung .quelle
Nein - es spielt keine Rolle. Unter NT bewirken die Erweiterung .bat und .cmd, dass der Prozessor cmd.exe die Datei genauso verarbeitet.
Zusätzliche interessante Informationen zu command.com vs. cmd.exe auf Systemen der WinNT-Klasse von MS TechNet ( http://technet.microsoft.com/en-us/library/cc723564.aspx ):
quelle
command /c ver
versus Starten von command.com und Eingeben von ver.RE: Anscheinend ist das Aufrufen von command.com ein komplexes Rätsel.
Vor einigen Monaten mussten wir im Verlauf eines Projekts herausfinden, warum einige Programme, die wir unter CMD.EXE ausführen wollten, tatsächlich unter COMMAND.COM ausgeführt wurden. Das fragliche "Programm" war eine sehr alte .BAT-Datei, die immer noch täglich ausgeführt wird.
Wir haben festgestellt, dass die Batch-Datei unter COMMAND.COM ausgeführt wurde, weil sie aus einer .PIF-Datei (ebenfalls uralt) gestartet wurde. Da die speziellen Speicherkonfigurationseinstellungen, die nur über ein PIF verfügbar sind, irrelevant geworden sind, haben wir sie durch eine herkömmliche Desktop-Verknüpfung ersetzt.
Dieselbe Batchdatei, die über die Verknüpfung gestartet wurde, wird in CMD.EXE ausgeführt. Wenn Sie darüber nachdenken, ist dies sinnvoll. Der Grund, warum wir so lange gebraucht haben, um es herauszufinden, war teilweise die Tatsache, dass wir vergessen hatten, dass es sich bei dem Artikel in der Startup-Gruppe um ein PIF handelte, da es seit 1998 in Produktion war.
quelle
Unter Windows 7 weisen BAT-Dateien jedoch auch diesen Unterschied auf: Wenn Sie jemals Dateien TEST.BAT und TEST.CMD im selben Verzeichnis erstellen und TEST in diesem Verzeichnis ausführen, wird die BAT-Datei ausgeführt.
quelle
PATHEXT
Variablen die Erweiterung .BAT vor der Erweiterung .CMD steht (wie in dieser Antwort gezeigt). Wenn Sie diese Reihenfolge in PATHEXT ändern, wird stattdessen die Datei test.cmd ausgeführt.PATH
unabhängig von der Erweiterung vor anderen Verzeichnissen in der Umgebungsvariablen steht.Da der ursprüngliche Beitrag wurde in Bezug auf die Folgen der .bat oder .cmd mit Suffix , die nicht unbedingt die Befehle innerhalb der Datei ...
Ein weiterer Unterschied zwischen .bat und .cmd besteht darin, dass, wenn zwei Dateien mit demselben Dateinamen und diesen beiden Erweiterungen vorhanden sind:
Eingabe Dateinamen oder Dateinamen BAT in der Befehlszeile wird die BAT - Datei auszuführen
Um die .cmd-Datei auszuführen, müssen Sie den Dateinamen .cmd eingeben
quelle
PATHEXT
Umgebungsvariablen ab. Die Reihenfolge, in der die Erweiterungen angezeigt werden, hat die Rangfolge, wenn keine Erweiterung angegeben ist. Erwähnenswert ist auch, dass es nicht erforderlich ist, eine Erweiterung für die Dateien anzugeben, deren Erweiterung in der env-Variablen angezeigt wird.Alles, was in einem Stapel arbeitet, sollte in einem cmd funktionieren. cmd bietet einige Erweiterungen zur Steuerung der Umgebung. Außerdem wird cmd von einem neuen cmd-Interpreter ausgeführt und sollte daher schneller (bei kurzen Dateien nicht erkennbar) und stabiler sein, da bat unter der NTVDM-emulierten 16-Bit-Umgebung ausgeführt wird
quelle
.bat
läuft nicht unter DOS in NT. Ein VDM wird nur gestartet, wenn ein Programm es benötigt, und wird unter 64-Bit-Windows nicht einmal unterstützt, obwohl ich glaube, dass .bat dies ist.Die Ausführung von .cmd- und .bat-Dateien ist unterschiedlich, da sie sich in einer .cmd-Fehlerpegelvariablen für einen Befehl ändern kann, der von Befehlserweiterungen betroffen ist. Das ist es wirklich.
quelle
@echo off&setlocal ENABLEEXTENSIONS call :func&&echo/I'm a cmd||echo/I'm a bat goto :EOF :func md;2>nul set var=1
Ich glaube, wenn Sie den Wert der ComSpec-Umgebungsvariablen in
%SystemRoot%system32\cmd.exe
(CMD) ändern, spielt es keine Rolle, ob die Dateierweiterung.BAT
oder ist.CMD
. Ich bin nicht sicher, aber dies kann sogar die Standardeinstellung für WinXP und höher sein.quelle
Etwas abseits des Themas, aber haben Sie Windows Scripting Host in Betracht gezogen ? Vielleicht finden Sie es schöner.
quelle
Die Erweiterung macht keinen Unterschied.
Es gibt geringfügige Unterschiede zwischen der
COMMAND.COM
Behandlung der Datei undCMD.EXE
.quelle
ein Unterschied:
.cmd-Dateien werden vor der Ausführung in den Speicher geladen. .bat-Dateien führen eine Zeile aus, lesen die nächste Zeile, führen diese Zeile aus ...
Sie können darauf stoßen, wenn Sie eine Skriptdatei ausführen und sie dann bearbeiten, bevor sie ausgeführt wird. Bat-Dateien werden dadurch durcheinander gebracht, Cmd-Dateien jedoch nicht.
quelle
.btm
("Batch to Memory") Dateien, wie sie mit den Ersatzbefehlsinterpreten von JP Software verwendet werden .echo 1&pause
dann ausgeführt hat. Du wirst sehen1
undPress any key to continue...
. Fügen Sie im angehaltenen Zustand eine neue Zeileecho 2&pause
mit dem externen Editor hinzu. Drücke eine Taste. Du wirst sehen2
undPress any key to continue...
. Sie können sogar versuchen,echo 3&pause
am Anfang hinzuzufügen . Wenn Sie danach erneut eine Taste drücken, sehen Sie2
.