După cum am înțeles. bat este o convenție veche de numire pe 16 biți, iar .cmd este pentru Windows pe 32 de biți, adică începând cu NT. Dar văd încă fișiere .bat peste tot și se pare că funcționează exact în același mod, folosind orice sufix. Presupunând că codul meu nu va mai trebui să lucreze la ceva mai vechi decât NT, contează cu adevărat cum îmi numesc fișierele batch sau există ceva getcha. mă așteaptă să folosesc un sufix greșit?
Citat din Wikipedia
Diferența numai cunoscută între .cmd și .bat - este că, în .cmd intra în ERRORLEVEL modificări variabile chiar și pe o comandă de succes, care este afectat de expansiune de comandă (în cazul în care echipele de expansiune), în timp ce în .bat-fișierele ERRORLEVEL modificări variabile numai în cazul unor erori.
Sursa Wikipedia citată mai sus se bazează de fapt pe publicarea acestui grup de știri.
Diferențele dintre .CMD și .BAT în CMD.EXE. Cu extensiile incluse, PATH / APPEND / PROMPT / SET / ASSOC în fișierele .CMD vor instala ERRORLEVEL indiferent de eroare. BAT setează ERRORLEVEL Doar dacă apar erori.
Iată o compilație a informațiilor verificate din diverse răspunsuri și referințe citate în acest thread:
Iată lista funcțiilor cmd.exe. care nu sunt acceptate de command.com:
- Nume lungi de fișiere (mai mare de 8,3)
- Istoria echipei
- Finalizați fila
- Simbolul de evacuare: ^ (Utilizați pentru: \ |> <^ )
- Director de stive: PUSHD / POPD
- Întreg aritmetică: SET / A i + = 1
- Căutare / Înlocuire / Subcrasă: SET% varname: expression%
- Înlocuirea de comandă: FOR / F (a existat înainte, a fost îmbunătățită)
- Funcții: CALL: etichetă
Dacă ambele versiuni ale .bat script-ul și script-ul .cmd (test.bat, test.cmd) se află în același director și rulați scriptul fără extensia (test), versiunea implicită a script .bat să fie chiar și în 64 de biți pentru Windows 7. Procedură Execuția este controlată de variabila de mediu PATHEXT. Vedeți ordinea în care Command Prompt execută fișierele pentru mai multe detalii.
Nu - nu este deloc important. Pe NT, extensiile .bat și .cmd determină ca procesorul cmd.exe să proceseze exact același fișier.
Acest comportament prezintă o caracteristică subtilă Windows NT, care este foarte importantă. Coperta pe 16 biți MS-DOS (COMMAND.COM) care vine cu Windows NT este special creată pentru Windows NT. Când introduceți o comandă pentru această coajă, ea nu o execută. În schimb, acesta împachetează textul comenzii și îl trimite la shell-ul comenzii CMD.EXE pe 32 de biți pentru execuție. Deoarece toate comenzile sunt de fapt executate de CMD.EXE (Shell Command Windows NT), shell-ul pe 16 biți moștenește toate funcțiile și instrumentele din întreaga coadă Windows NT.
RE: Se pare că, atunci când command.com este chemat, este un pic un secret complicat;
Cu câteva luni în urmă, în timpul proiectului, a trebuit să aflăm de ce unele programe pe care am dorit să le executăm în cadrul CMD.EXE au lucrat efectiv sub COMMAND.COM. "Programul" în cauză era un fișier foarte vechi .BAT care funcționează zilnic.
Am constatat că motivul pentru care fișierul de comandă funcționează sub comanda COMMAND.COM este că pornește din fișierul .PIF (de asemenea vechi). Deoarece setările de configurare a memoriei speciale, accesibile numai prin PIF, au devenit inadecvate, l-am înlocuit cu comanda rapidă obișnuită de pe desktop.
Deoarece mesajul original a fost despre consecințele utilizării sufixului .bat sau .cmd. comenzile opționale din interiorul fișierului.
O altă diferență dintre .bat și .cmd este că dacă există două fișiere cu același nume de fișier și ambele extensii, atunci:
introduceți numele fișierului sau numele fișierului .bat pe linia de comandă va porni fișierul .bat
Pentru a rula fișierul .cmd, trebuie să introduceți numele fișierului .cmd
Cu toate acestea, în Windows 7 BAT-fișiere au, de asemenea, această diferență: dacă ați creat vreodată și fișiere TEST.BAT TEST.CMD în același director, și rulați TEST în acest catalog, el a fugit BAT-fișier .
toți cei care lucrează în partid trebuie să lucreze în cmd; Cmd oferă câteva extensii pentru a gestiona mediul. Mai mult decât atât, cmd se realizează în noul CMD-interpret, și, în consecință, ar trebui să fie mai rapid (nu este evident în scurt-fișiere) și mai stabil, deoarece BAT se execută un mediu de 16-biți emulat de sprijin NTVDM.
Eu cred că, dacă modificați variabila de mediu în% SystemRoot ComSpec% system32 \ cmd.exe, nu contează dacă extensia .bat fișier sau .cmd. Nu sunt sigur, dar acest lucru poate fi chiar și implicit pentru WinXP și mai mare.
cmd și .bat diferă de faptul că în variabila .cmd errorlevel se poate schimba într-o comandă care este afectată de extensiile de comandă. TThats despre asta într-adevăr.
Fișierele cmd sunt încărcate în memorie înainte de execuție. bat-fișiere execută un șir, citiți următoarea linie, executați această linie.
puteți executa acest lucru când executați un fișier de script și apoi îl editați înainte de a fi executat. Fișierele Bat vor fi corupte de acest lucru, dar fișierele cmd nu vor fi corupte.