Jaka jest różnica między plikami .cmd i .bat?

28

Po prostu ciekawy. „Fajni” ludzie w naszej firmie zawsze używają * .cmd, podczas gdy nikt nie był w stanie wyjaśnić mi różnicy.

Artem Tichomirow
źródło

Odpowiedzi:

11

Istnieją różnice semantyczne w języku poleceń używanym dla każdego ( .batpliki uzyskują wersję kompatybilności). Niektóre z nich można zilustrować stąd :

@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

Zasadniczo .cmdpliki otrzymują aktualną, bardziej seksowną wersję języka poleceń MS, dlatego też fajne dzieci z nich korzystają.

chaos
źródło
2
<3 zaciemnione skrypty cmd :)
grawity
Tak! Poprawiono mnie. Nigdy wcześniej nie znałem tego zachowania CMD.EXE.
Evan Anderson
6

Według Wikipedii:

.bat: pierwsze rozszerzenie używane przez Microsoft do plików wsadowych. To rozszerzenie można uruchomić w większości systemów operacyjnych Microsoft, w tym MS-DOS i większości wersji Microsoft Windows.

.cmd: nowsze rozszerzenie .cmd jest opisywane przez systemy oparte na Windows NT jako „skrypt poleceń Windows NT” i jest pomocne, ponieważ użycie rozszerzenia .cmd zamiast rozszerzenia .bat oznacza, że ​​wcześniejsze wersje systemu Windows nie będą wiedziały, jak to zrobić. uruchom go, aby nie próbowali pomylić poleceń z plikami stylu COMMAND.COM i nie uruchomili poleceń nowego stylu ze względu na brak rozszerzeń poleceń, co powoduje, że skrypty są uruchamiane tylko częściowo, co może okazać się szkodliwe (dla przykład; nieudane sprawdzenie udanego kopiowania pliku, a następnie usunięcie oryginału).

Jedyną znaną różnicą między przetwarzaniem plików .cmd i .bat jest to, że w pliku .cmd zmienna ERRORLEVEL zmienia się nawet w przypadku pomyślnego polecenia, na które wpływ mają rozszerzenia poleceń (gdy rozszerzenia poleceń są włączone), natomiast w plikach .bat zmienna ERRORLEVEL zmienia się tylko w przypadku błędów.

Mam nadzieję że to pomoże.

KPWINC
źródło
1

Teoretycznie .cmd jest bardziej „prawdziwy” :), ponieważ .bat jest skryptem dla starego DOS command.com, podczas gdy .cmd jest dla cmd.exe z Windows NT, ten ostatni ma nieco ulepszone skrypty. W prawdziwym życiu zwykle oba są równe, jak pisanie / bin / sh lub / bin / bash w Linuksie (oznacza to, że sh to bash)

disserman
źródło
0

Najpierw zobaczyłem format .cmd używany w OS / 2. Jeśli myślisz w kategoriach DOS, jest to jak plik .bat na sterydach. Pliki .bat zostały wprowadzone najpierw w systemach operacyjnych DOS typu. Wiele składni jest podobna, z wyjątkiem sytuacji, gdy zaczynasz wchodzić w zaawansowane funkcje. Ponadto plik .cmd może nie działać w środowisku 16-bitowym (win98), podczas gdy plik .bat prawdopodobnie będzie działał we wszystkich środowiskach.

Pete
źródło