Was ist der Unterschied zwischen .cmd- und .bat-Dateien?

27

Nur neugierig. "Coole" Leute in unserer Firma benutzen immer * .cmd, während mir niemand den Unterschied erklären konnte.

Artem Tikhomirov
quelle

Antworten:

10

Es gibt semantische Unterschiede in der jeweils verwendeten Befehlssprache ( .batDateien erhalten eine Kompatibilitätsversion). Einige davon können mit diesem Skript von hier aus veranschaulicht werden :

@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

Grundsätzlich erhalten .cmdDateien die aktuelle, sexyere Version der MS-Befehlssprache, weshalb die coolen Kids sie verwenden.

Chaos
quelle
2
<3 verschleierte Cmd-Skripte :)
Grawity
Yeesh! Ich stehe korrigiert. Ich kannte das Verhalten von CMD.EXE noch nie.
Evan Anderson
6

Laut Wikipedia:

.bat: Die erste Erweiterung, die von Microsoft für Batchdateien verwendet wird. Diese Erweiterung kann in den meisten Microsoft-Betriebssystemen ausgeführt werden, einschließlich MS-DOS und den meisten Versionen von Microsoft Windows.

.cmd: Die neuere .cmd-Erweiterung wird von Windows NT-basierten Systemen als "Windows NT-Befehlsskript" beschrieben und ist hilfreich, da die Verwendung einer .cmd-Erweiterung anstelle der .bat-Erweiterung bedeutet, dass frühere Windows-Versionen nicht wissen, wie sie funktioniert Führen Sie es aus, damit sie nicht versuchen, die Befehle für COMMAND.COM - Stildateien zu verwenden und verwechseln und die neuen Stildateien aufgrund fehlender Befehlserweiterungen nicht ausführen, was dazu führt, dass Skripts nur teilweise ausgeführt werden, was sich als schädlich erweisen kann (z Beispiel: Fehler beim Überprüfen des erfolgreichen Kopierens einer Datei und beim Löschen des Originals.

Der einzige bekannte Unterschied zwischen der Verarbeitung von .cmd- und .bat-Dateien besteht darin, dass sich in einer .cmd-Datei die Variable ERRORLEVEL auch bei einem erfolgreichen Befehl ändert, der von Befehlserweiterungen betroffen ist (wenn Befehlserweiterungen aktiviert sind), wohingegen in .bat-Dateien die Variable ERRORLEVEL geändert wird Änderungen nur bei Fehlern.

Hoffe das hilft.

KPWINC
quelle
1

Theoretisch ist .cmd eher "trueЪ" :), da .bat ein Skript für das alte DOS command.com ist, während .cmd für cmd.exe unter Windows NT ist. Das letzte hat ein etwas besseres Skripting. Im wirklichen Leben sind normalerweise beide gleich, wie zB / bin / sh oder / bin / bash in Linux (meine Distributionen, in denen sh tatsächlich bash ist).

Disserman
quelle
0

Ich habe zum ersten Mal das unter OS / 2 verwendete .cmd-Format gesehen. Wenn Sie in DOS-Begriffen denken, ist es wie eine .bat-Datei für Steroide. .bat-Dateien wurden zuerst unter DOS-Betriebssystemen eingeführt. Ein Großteil der Syntax ist ähnlich, außer wenn Sie mit erweiterten Funktionen beginnen. Außerdem funktioniert eine CMD-Datei möglicherweise nicht in einer 16-Bit-Umgebung (win98), wohingegen eine BAT-Datei wahrscheinlich in allen Umgebungen funktioniert.

Pete
quelle