Si je comprends bien, .bat
c'est l'ancienne convention de dénomination 16 bits, et .cmd
c'est pour Windows 32 bits, c'est-à-dire en commençant par NT. Mais je continue de voir des fichiers .bat partout, et ils semblent fonctionner exactement de la même manière en utilisant l'un ou l'autre suffixe. En supposant que mon code ne sera jamais besoin sur quoi que ce soit de plus que NT, est - ce vraiment de quelle manière je nomme mes fichiers batch, ou est - il un Gotcha me attend en utilisant le mauvais suffixe?
windows
batch-file
cmd
Chris Noe
la source
la source
Réponses:
De cette publication de groupe de nouvelles par Mark Zbikowski lui-même:
En d'autres termes, si ERRORLEVEL est défini sur non-0 et que vous exécutez ensuite l'une de ces commandes, le résultat ERRORLEVEL sera:
la source
set var=..
instruction. Ce qui est étrange, car j'ai supposé que c'était le comportement attendu. Des arguments pourraient être avancés pour les deux. Je m'en tiendrai aux fichiers .bat. :-)DPATH /?
qu'elle répertorie toujours la commande comme APPEND. De plus, l'article Wiki a depuis été principalement corrigé, sauf qu'il ne répertorie pas DPATH.Voici une compilation d'informations vérifiées à partir des différentes réponses et références citées dans ce fil:
command.com
est le processeur de commandes 16 bits introduit dans MS-DOS et a également été utilisé dans la série de systèmes d'exploitation Win9x.cmd.exe
est le processeur de commandes 32 bits de Windows NT (les systèmes d'exploitation Windows 64 bits ont également une version 64 bits).cmd.exe
n'a jamais fait partie de Windows 9x. Il est originaire de OS / 2 version 1.0, et la version OS / 2 decmd
16 bits a commencé (mais était néanmoins un programme en mode protégé à part entière avec des commandes commestart
). Windows NT a héritécmd
d'OS / 2, mais la version Win32 de Windows NT a démarré en 32 bits. Bien que OS / 2 soit passé à 32 bits en 1992, ilcmd
restait un programme OS / 2 1.x 16 bits.ComSpec
variable env définit le programme lancé.bat
et les.cmd
scripts. (À partir de WinNT, cette valeur par défaut estcmd.exe
.)cmd.exe
est rétrocompatible aveccommand.com
.cmd.exe
peut être nommé.cmd
pour empêcher une exécution accidentelle sur Windows 9x. Cette extension de nom de fichier remonte également à OS / 2 version 1.0 et 1987.Voici une liste de
cmd.exe
fonctionnalités qui ne sont pas prises en charge parcommand.com
:^
(utilisation pour:\ & | > < ^
)PUSHD
/POPD
SET /A i+=1
SET %varname:expression%
FOR /F
(existait auparavant, a été améliorée)CALL :label
Ordre d'exécution:
Si les versions .bat et .cmd d'un script (test.bat, test.cmd) se trouvent dans le même dossier et que vous exécutez le script sans l'extension (test), par défaut, la version .bat du script s'exécutera, même sur Windows 64 bits 7. L'ordre d'exécution est contrôlé par la variable d'environnement PATHEXT. Voir Ordre dans lequel l'invite de commandes exécute les fichiers pour plus de détails.
Références:
wikipedia: Comparaison des shells de commande
la source
dir filename
c'est la même chose quedir filename.*
dans command.com; le caractère générique est requis dans cmd.exe. Dans command.comrem Create an empty file > empty.txt
fonctionne; pas dans cmd.exe.Ces réponses sont un peu trop longues et axées sur une utilisation interactive. Les différences importantes pour les scripts sont les suivantes:
.cmd
empêche l'exécution accidentelle sur des systèmes non NT..cmd
permet aux commandes intégrées de changer Errorlevel à 0 en cas de succès.Pas si excitant, hein?
Auparavant, un certain nombre de fonctionnalités supplémentaires étaient activées dans les
.cmd
fichiers, appelées extensions de commandes. Cependant, ils sont désormais activés par défaut pour les fichiers.bat
et.cmd
sous Windows 2000 et versions ultérieures.Conclusion: en 2012 et au-delà, je recommande d'utiliser
.cmd
exclusivement.la source
Non, cela n'a aucune importance. Sous NT, l'extension .bat et .cmd entraînent toutes deux le traitement par le processeur cmd.exe du fichier de la même manière.
Informations supplémentaires intéressantes sur command.com par rapport à cmd.exe sur les systèmes de classe WinNT de MS TechNet ( http://technet.microsoft.com/en-us/library/cc723564.aspx ):
la source
command /c ver
versus démarrer command.com et taper ver.RE: Apparemment, quand command.com est invoqué, c'est un peu un mystère complexe;
Il y a plusieurs mois, au cours d'un projet, nous avons dû comprendre pourquoi certains programmes que nous voulions exécuter sous CMD.EXE fonctionnaient en fait sous COMMAND.COM. Le "programme" en question était un très ancien fichier .BAT, qui fonctionne toujours quotidiennement.
Nous avons découvert que la raison pour laquelle le fichier de commandes s'exécutait sous COMMAND.COM est qu'il était démarré à partir d'un fichier .PIF (également ancien). Étant donné que les paramètres de configuration de mémoire spéciaux disponibles uniquement via un PIF ne sont plus pertinents, nous l'avons remplacé par un raccourci de bureau classique.
Le même fichier de commandes, lancé à partir du raccourci, s'exécute dans CMD.EXE. Quand on y pense, cela a du sens. La raison pour laquelle il nous a fallu si longtemps pour le comprendre était en partie due au fait que nous avions oublié que son article dans le groupe de démarrage était un PIF, car il était en production depuis 1998.
la source
Néanmoins, sur Windows 7, les fichiers BAT ont également cette différence: si vous créez des fichiers TEST.BAT et TEST.CMD dans le même répertoire et que vous exécutez TEST dans ce répertoire, il exécutera le fichier BAT.
la source
PATHEXT
variable, l'extension .BAT est placée avant .CMD (comme indiqué dans cette réponse). Si vous modifiez cet ordre dans PATHEXT, le test.cmd serait exécuté à la place.PATH
variable d'environnement, quelle que soit l'extension.Étant donné que le message d'origine concernait les conséquences de l'utilisation du suffixe .bat ou .cmd , pas nécessairement les commandes à l' intérieur du fichier ...
Une autre différence entre .bat et .cmd est que si deux fichiers existent avec le même nom de fichier et ces deux extensions, alors:
la saisie du nom de fichier ou du nom de fichier .bat sur la ligne de commande exécutera le fichier .bat
pour exécuter le fichier .cmd, vous devez entrer le nom de fichier .cmd
la source
PATHEXT
variable d'environnement. L'ordre dans lequel les extensions apparaissent est l'ordre de priorité si aucune extension n'est spécifiée. Il convient également de mentionner qu'il n'est pas nécessaire de spécifier une extension pour les fichiers dont son extension apparaît dans la variable env.tout ce qui fonctionne dans un lot devrait fonctionner dans un cmd; cmd fournit quelques extensions pour contrôler l'environnement. également, cmd est exécuté par dans le nouvel interpréteur cmd et devrait donc être plus rapide (non visible sur les fichiers courts) et plus stable lorsque la chauve-souris s'exécute sous l'environnement 16 bits émulé NTVDM
la source
.bat
ne fonctionne pas sous DOS dans NT. Un VDM n'est démarré que si un programme en a besoin et n'est même pas pris en charge dans Windows 64 bits, bien que je pense que .bat l'est.L'exécution des fichiers .cmd et .bat est différente car dans une variable de niveau d'erreur .cmd, elle peut changer sur une commande qui est affectée par les extensions de commande. C'est à peu près tout.
la source
@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
Je crois que si vous changez la valeur de la variable d'environnement ComSpec en
%SystemRoot%system32\cmd.exe
(CMD), alors peu importe si l'extension de fichier est.BAT
ou.CMD
. Je ne suis pas sûr, mais cela peut même être la valeur par défaut pour WinXP et supérieur.la source
Légèrement hors sujet, mais avez-vous envisagé Windows Scripting Host ? Vous pourriez trouver cela plus agréable.
la source
L'extension ne fait aucune différence.
Il existe de légères différences entre la
COMMAND.COM
gestion du fichier etCMD.EXE
.la source
une différence:
Les fichiers .cmd sont chargés en mémoire avant d'être exécutés. Les fichiers .bat exécutent une ligne, lisent la ligne suivante, exécutent cette ligne ...
vous pouvez le rencontrer lorsque vous exécutez un fichier de script, puis l'éditez avant qu'il ne soit terminé. les fichiers bat seront gâchés par cela, mais pas les fichiers cmd.
la source
.btm
aux fichiers ("batch to memory") utilisés avec les interpréteurs de commandes de remplacement de JP Software .echo 1&pause
ensuite exécuté. Vous verrez1
etPress any key to continue...
. En pause, ajoutez une nouvelle ligneecho 2&pause
avec un éditeur externe. Appuyez sur une touche. Vous verrez2
etPress any key to continue...
. Vous pouvez même essayer d'ajouterecho 3&pause
au début. Lorsque vous appuyez à nouveau sur une touche après cela, vous verrez2
.