File batch di Windows: .bat vs .cmd?


Answers

Ecco una raccolta di informazioni verificate dalle varie risposte e riferimenti citati in questo thread:

  1. command.com è il processore di comandi a 16 bit introdotto in MS-DOS ed è stato utilizzato anche nella serie di sistemi operativi Win9x.
  2. cmd.exe è il processore di comandi a 32 bit in Windows NT (i sistemi operativi Windows a 64 bit hanno anche una versione a 64 bit). cmd.exe non è mai stato parte di Windows 9x. Ha avuto origine in OS / 2 versione 1.0 e la versione OS / 2 di cmd iniziato a 16 bit (ma era comunque un programma in modalità protetta completo con comandi come start ). Windows NT ha ereditato cmd da OS / 2, ma la versione Win32 di Windows NT è stata avviata a 32 bit. Sebbene OS / 2 sia andato a 32 bit nel 1992, il suo cmd rimasto un programma OS / 2 1.x a 16 bit.
  3. La variabile env ComSpec definisce quale programma viene avviato dagli script .bat e .cmd . (A partire da WinNT, questo valore predefinito è cmd.exe .)
  4. cmd.exe è retrocompatibile con command.com .
  5. Uno script progettato per cmd.exe può essere denominato .cmd per impedire l'esecuzione accidentale su Windows 9x. Questa estensione del nome file risale anche a OS / 2 versione 1.0 e 1987.

Ecco un elenco di funzionalità di cmd.exe che non sono supportate da command.com :

  • Nome file lungo (superiore al formato 8.3)
  • Cronologia dei comandi
  • Completamento Tab
  • Carattere di fuga: ^ (Utilizzare per: \ & | > < ^ )
  • Stack di directory: PUSHD / POPD
  • Aritmetica dei numeri interi: SET /A i+=1
  • Cerca / Sostituisci / Sottostringa: SET %varname:expression%
  • Sostituzione di comando: FOR /F (esistente prima, è stato migliorato)
  • Funzioni: CALL :label

Ordine di esecuzione:

Se entrambe le versioni .bat e .cmd di uno script (test.bat, test.cmd) si trovano nella stessa cartella e si esegue lo script senza l'estensione (test), per impostazione predefinita verrà eseguita la versione .bat dello script, anche su Windows 7 a 64 bit. L'ordine di esecuzione è controllato dalla variabile di ambiente PATHEXT. Vedere Ordine in cui Prompt dei comandi esegue i file per ulteriori dettagli.

Riferimenti:

wikipedia: confronto delle shell dei comandi

Question

A quanto ho capito, .bat è la vecchia convenzione di denominazione a 16 bit e .cmd è per Windows a 32 bit, ovvero, a partire da NT. Ma continuo a vedere i file .bat ovunque, e sembrano funzionare esattamente allo stesso modo usando entrambi i suffissi. Supponendo che il mio codice non avrà mai bisogno di eseguire su qualcosa di più vecchio di NT, è davvero importante in quale modo io chiamo i miei file batch, o c'è qualche trucco che mi aspetta usando il suffisso sbagliato?




tutto ciò che funziona in un lotto dovrebbe funzionare in un cmd; cmd fornisce alcune estensioni per il controllo dell'ambiente. inoltre, cmd viene eseguito da in un nuovo interprete cmd e quindi dovrebbe essere più veloce (non visibile su file brevi) e lo stabler come bat funziona sotto l'ambiente emulato a 16 bit NTVDM




L'esecuzione di file .cmd e .bat è diversa perché in una variabile errorlevel .cmd può cambiare su un comando che è interessato dalle estensioni dei comandi. Questo è davvero.




No, non importa nel minimo. Su NT l'estensione .bat e .cmd fanno sì che il processore cmd.exe elabori il file esattamente nello stesso modo.

Ulteriori informazioni interessanti su command.com vs cmd.exe su sistemi WinNT di MS TechNet ( http://technet.microsoft.com/en-us/library/cc723564.aspx ):

Questo comportamento rivela una funzionalità piuttosto sottile di Windows NT che è molto importante. La shell MS-DOS a 16 bit (COMMAND.COM) fornita con Windows NT è appositamente progettata per Windows NT. Quando un comando viene immesso per l'esecuzione da questa shell, in realtà non viene eseguito. Invece, impacchetta il testo del comando e lo invia a una shell di comando CMD.EXE a 32 bit per l'esecuzione. Poiché tutti i comandi vengono effettivamente eseguiti da CMD.EXE (la shell dei comandi di Windows NT), la shell a 16 bit eredita tutte le funzionalità e le funzionalità della shell di Windows NT completa.




Essendo un programmatore Cmd e guardando in tutto il web, non importa quale sia quello che usi, puoi avere un programma .bat su un Windows 7 ed eseguirlo su un Windows 10. ma se vuoi su un Windows 10, probabilmente non sarai in grado di eseguire tutti i comandi su Windows 7. A .cmd è esattamente lo stesso, e esegue lo stesso identico programma e codici.

Tutta la differenza è che è un nome diverso dello stesso programma, purché sia ​​connesso a CMD.EXE , esegue gli stessi comandi.




Poiché il post originale riguardava le conseguenze dell'utilizzo del suffisso .bat o .cmd, non necessariamente i comandi all'interno del file ...

Un'altra differenza tra .bat e .cmd è che se esistono due file con lo stesso nome file e entrambe le estensioni, allora:

  • inserendo il nome file o il nome file .bat nella riga di comando verrà eseguito il file .bat

  • per eseguire il file .cmd, devi inserire il nome del file .cmd







Links