Pliki wsadowe systemu Windows:.bat vs. cmd?
Jak rozumiem, .bat
jest starą 16-bitową konwencją nazewnictwa, a .cmd
jest dla 32-bitowych okien, tzn. począwszy od NT. Ale nadal to widzę .pliki bat wszędzie i wydają się działać dokładnie tak samo, używając każdego z przyrostków. Zakładając, że mój kod nigdy nie będzie musiał działać na czymś starszym niż NT, czy naprawdę ma znaczenie, w jaki sposób nazwę moje pliki wsadowe, czy jest jakiś gotcha czekający na mnie używając niewłaściwego przyrostka?
15 answers
From this news group posting by Mark Zbikowski we własnej osobie:
Różnice między .CMD i .Kij do CMD.EXE jest zaniepokojony są: z włączonymi rozszerzeniami, ścieżka / Dołącz/monit/Ustaw / ASSOC w .CMD pliki ustawią poziom błędu niezależnie od błędu. .BAT ustawia ERRORLEVEL tylko na błędy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-26 10:20:29
Oto zestawienie zweryfikowanych informacji z różnych odpowiedzi i cytowanych odniesień w tym wątku:]}
-
command.com
to 16-bitowy procesor poleceń wprowadzony w MS-DOS i był również używany w serii systemów operacyjnych Win9x. -
cmd.exe
jest 32-bitowym procesorem poleceń w systemie Windows NT (64-bitowe systemy operacyjne Windows mają również 64-bitową wersję).cmd.exe
nigdy nie była częścią systemu Windows 9x. powstała w wersji OS/2 1.0, a wersja OS / 2cmd
zaczęła się 16-bitowo (ale była niemniej jednak pełnoprawny program trybu chronionego z poleceniami takimi jakstart
). Windows NT odziedziczyłcmd
z OS/2, ale Windows NT w wersji Win32 zaczynał od wersji 32-bitowej. Mimo że OS/2 w 1992 roku był 32-bitowy, jegocmd
pozostał 16-bitowy OS/2 1.program X. - zmienna
ComSpec
ENV określa, który program jest uruchamiany przez skrypty.bat
i.cmd
. (Począwszy od WinNT domyślnie jest tocmd.exe
.) -
{[1] } jest wstecznie kompatybilny z
command.com
. - skrypt przeznaczony dla
cmd.exe
może być nazwany.cmd
, aby zapobiec przypadkowemu wykonaniu w systemie Windows 9x. to rozszerzenie nazwy pliku pochodzi również z wersji OS/2 1.0 i 1987.
Oto lista cmd.exe
funkcji, które nie są obsługiwane przez command.com
:
- długie nazwy plików (przekraczające format 8.3)
- Historia poleceń
- uzupełnianie tabulatury
- Escape character:
^
(Użyj dla:\ & | > < ^
) - stos katalogów:
PUSHD
/POPD
- arytmetyka całkowita:
SET /A i+=1
- Search / Replace/ Substring:
SET %varname:expression%
- podstawienie polecenia:
FOR /F
(istniało wcześniej, zostało wzmocnione) - funkcje:
CALL :label
Kolejność wykonania:
Jeśli oba .bat i .wersje cmd skryptu (test.bat, test.cmd) znajdują się w tym samym folderze i uruchamiasz skrypt bez rozszerzenia (test), domyślnie the .wersja bat skryptu zostanie uruchomiona, nawet na 64-bitowym Windows 7. Kolejność wykonania jest kontrolowana przez środowisko PATHEXT zmienna. Zobacz kolejność, w jakiej Wiersz polecenia wykonuje pliki , aby uzyskać więcej szczegółów.
Bibliografia:
Wikipedia: porównanie powłok poleceń
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:22
Te odpowiedzi są nieco zbyt długie i koncentrują się na interaktywnym użyciu. Istotne różnice to:
-
.cmd
zapobiega nieumyślnemu wykonaniu w systemach innych niż NT. -
.cmd
włącza wbudowane polecenia, aby zmienić poziom błędu na 0 po pomyślnym zakończeniu.
Edit: rozszerzenia poleceń są domyślnie włączone w obu .bat i .pliki cmd w systemie Windows 2000 lub nowszym.
W 2012 roku i Później, polecam używać .cmd
wyłącznie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-04 03:42:14
Nie - to nie ma najmniejszego znaczenia. Na NT .bat i .rozszerzenie cmd powoduje zarówno cmd.procesor exe do przetwarzania pliku w dokładnie taki sam sposób.
Dodatkowe ciekawe informacje o command.com vs. cmd.exe na systemach klasy WinNT z MS TechNet ( http://technet.microsoft.com/en-us/library/cc723564.aspx):
To zachowanie ujawnia dość subtelny cecha systemu Windows NT, która jest bardzo ważne. 16-bitowa powłoka MS-DOS (COMMAND.COM), że statki z oknami NT jest specjalnie zaprojektowany Dla Windows NT. Po wpisaniu polecenia dla wykonanie przez tę powłokę, nie właściwie to wykonaj. Zamiast tego pakuje Tekst polecenia i wysyła go do 32-bitowego CMD.Exe command shell for egzekucja. Ponieważ wszystkie polecenia są faktycznie stracony przez CMD.EXE (the Windows NT command shell), 16-bitowy shell dziedziczy wszystkie funkcje i wyposażenie pełnego Windows NT shell.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 23:34:10
RE: podobno kiedy command.com jest wywoływany jest trochę skomplikowaną tajemnicą;
Kilka miesięcy temu, w trakcie realizacji projektu, musieliśmy dowiedzieć się, dlaczego niektóre programy, które chcieliśmy uruchomić pod CMD.EXE w rzeczywistości działały pod COMMAND.COM. omawiany "program" był bardzo stary .Plik BAT, który nadal działa codziennie.
Odkryliśmy, że powodem, dla którego plik wsadowy działał pod COMMAND.COM jest to, że został on uruchomiony z .Plik PIF (także ancient). Ponieważ specjalne ustawienia konfiguracji pamięci dostępne tylko przez PIF stały się nieistotne, zastąpiliśmy je konwencjonalnym skrótem na pulpicie.
Ten sam plik wsadowy, uruchomiony ze skrótu, działa w CMD.EXE. Kiedy o tym pomyślisz, to ma sens. Powodem, dla którego zajęło nam to tak długo, było częściowo to, że zapomnieliśmy, że jego pozycja w grupie startupowej to PIF, ponieważ był w produkcji od 1998 roku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-07 22:47:44
Ponieważ oryginalny post dotyczył konsekwencji korzystania zbat lub .cmd przyrostek, niekoniecznie polecenia wewnątrz pliku...
Jeszcze jedna różnica między .bat i .cmd polega na tym, że jeśli istnieją dwa pliki o tej samej nazwie i obu tych rozszerzeniach, to:
-
Wpisanie filename lub filename.bat w wierszu poleceń uruchomi .plik bat
-
Aby uruchomić .plik cmd, musisz wpisać nazwa pliku .cmd
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-05 14:46:29
Jednak w Windows 7 Pliki BAT mają również tę różnicę: jeśli kiedykolwiek utworzysz pliki TEST.BAT i TEST.CMD w tym samym katalogu, a Ty uruchomisz TEST w tym katalogu, to uruchomi plik BAT.
C:\>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
C:\Temp>echo echo bat > test.bat
C:\Temp>echo echo cmd > test.cmd
C:\Temp>test
C:\Temp>echo bat
bat
C:\Temp>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-22 17:04:09
Wszystko, co działa w partii, powinno działać w cmd; cmd zapewnia pewne rozszerzenia do kontrolowania środowiska. ponadto, cmd jest wykonywane przez nowy interpreter cmd i dlatego powinno być szybsze (nie zauważalne na krótkich plikach) i stabler, ponieważ bat działa pod emulowanym środowiskiem ntvdm 16bit
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 14:47:51
Wierzę, że jeśli zmienisz wartość zmiennej środowiskowej ComSpec na %SystemRoot%system32 \ cmd.exe to nie ma znaczenia, czy rozszerzenie pliku jest .BAT lub .CMD. Nie jestem pewien, ale może to być nawet domyślne dla WinXP i powyżej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 17:40:39
Nieco off topic, ale czy rozważałeś Windows Scripting Host? Może Ci się spodoba.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-08 21:52:40
.cmd i .wykonanie pliku bat jest inne, ponieważ wzmienna cmd errorlevel może zmienić polecenie, na które mają wpływ rozszerzenia poleceń. To wszystko.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-15 18:56:49
Rozszerzenie nie robi różnicy. Istnieją niewielkie różnice między COMMAND.COM obsługa pliku a CMD.EXE
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 14:45:17
Oto jedna różnica, którą odkryłem: EnableDelayedExpansion
jest wymagane W .cmd
plikach.
Gdzie jak w przypadku plików .bat
domyślnie jest to niejawne. (Windows 10)
dir *? | find /i "FOOBAR"
if ERRORLEVEL 0 (
set result="found" ) else (
set result="not found" )
echo %result%
To działa w .bat
, ale zawsze jest found
W przypadku pliku .cmd
.
Zmiana line 2
na następujące sprawia, że działa zgodnie z oczekiwaniami:
if %ERRORLEVEL% equ 0 (
I na koniec dla pliku .cmd
działa to poprawnie:
setLocal EnableDelayedExpansion
...
if !ErrorLevel! equ 1 (
...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-04 23:24:56
Jako programista Cmd i patrząc po całej sieci, naprawdę nie ma znaczenia, którego z nich używasz, możesz mieć .bat
program na Windows 7 i uruchomić go na Windows 10. ale jeśli chcesz to zrobić w systemie Windows 10, prawdopodobnie nie będziesz w stanie uruchomić wszystkich poleceń w systemie Windows 7. A .cmd
jest dokładnie taki sam sposób i uruchamia dokładnie ten sam program i kody.
Różnica polega na tym, że to inna nazwa tego samego programu, dopóki jest podłączony do CMD.EXE
, działa te same polecenia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-06 18:05:09
Różnica:
.pliki cmd są ładowane do pamięci przed wykonaniem. .pliki bat wykonują linię, odczytują następną linię, wykonują tę linię...
Można natknąć się na to, gdy wykonujesz plik skryptu, a następnie edytujesz go przed wykonaniem. pliki bat będą przez to pomieszane, ale pliki cmd nie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-03 20:22:22