Si je comprends bien, est l’ancienne convention de nommage de 16 bits, et
est pour Windows 32 bits, c'est-à-dire, à partir de NT. Mais je continue à voir partout des fichiers .bat, et elles semblent fonctionner exactement la même chose à l’aide d’un suffixe. En supposant que mon code devra jamais fonctionner sur n’importe quoi plus de NT, importe-t-elle vraiment quel chemin j’ai nommer mes fichiers de commandes, ou y a-t-il certains gotcha qui m’attend en utilisant le suffixe incorrect ?
Réponses
Trop de publicités?De Wikipedia:
Nouvelle Citation de Wikipedia
La seule différence connue entre .cmd et .fichier bat de l'exécution, c'est que dans un .cmd fichier la variable ERRORLEVEL des changements même sur le succès de la commande qui est concerné par les Extensions de Commande (lorsque les Extensions de commandes sont activées), alors que dans .les fichiers bat le ERRORLEVEL la modification de la variable uniquement sur les erreurs.
La source pour Wikipédia citation ci-dessus est en fait basé sur cette publication.
Les différences entre les deux .CMD et .BAT aussi loin que CMD.EXE est concerné sont: Avec des extensions activé, le CHEMIN d'accès/AJOUTER/INVITE/SET/ASSOC .CMD fichiers de jeu ERRORLEVEL indépendamment de l'erreur. .Chauve-souris met ERRORLEVEL seulement sur les erreurs.
Non seulement est-il un peu plus restrictive en ce qui concerne les différences, que le Wikipedia de texte, mais est également la peine d'être mentionné explicitement, compte tenu du fait qu'il a été envoyé par la Marque Zbikowski lui - même, ce qui donne une énorme crédibilité bonus à mon humble avis.
Voici une compilation de vérifié les informations provenant des différentes réponses et les références citées dans ce fil:
-
command.com
est la 16-bit de commande du processeur introduit dans MS-DOS et a également été utilisé dans le Win9x série de systèmes d'exploitation. -
cmd.exe
est la version 32 bits processeur de commande dans Windows NT (Windows 64 bits des Systèmes d'exploitation ont aussi une version 64 bits).cmd.exe
n'a jamais fait partie de Windows 9x. Il trouve son origine dans OS/2 version 1.0 et la version OS/2 d'cmd
a commencé à 16 bits (mais il était néanmoins un véritable programme en mode protégé avec des commandes commestart
). Windows NT héritécmd
à partir d'OS/2, Windows NT version Win32 commencé 32 bits. Bien que OS/2 est allé 32 bits en 1992, soncmd
est resté un 16-bit OS/2 1.x programme. - L'
ComSpec
env variable définit le programme qui est lancé par.bat
et.cmd
scripts. (En commençant par WinNT la valeur par défaut estcmd.exe
.) -
cmd.exe
est compatible aveccommand.com
. - Un script est conçu pour
cmd.exe
peut être nommé.cmd
pour empêcher l'activation accidentelle de l'exécution sur Windows 9x. Cette extension de nom de fichier remonte aussi à OS/2 version 1.0 et 1987.
Voici une liste d' cmd.exe
fonctionnalités qui ne sont pas pris en charge par command.com
:
- Les noms de fichiers longs (dépassant le format 8.3)
- L'historique des commandes
- La saisie semi-automatique
- Caractère d'échappement:
^
(Utilisation:\ & | > < ^
) - Répertoire de la pile:
PUSHD
/POPD
- L'arithmétique des nombres entiers:
SET /A i+=1
- Rechercher/Remplacer/Sous-Chaîne:
SET %varname:expression%
- La substitution de commande:
FOR /F
(existait avant, a été amélioré) - Fonctions:
CALL :label
L'ordre d'Exécution:
Si les deux .chauve-souris et .cmd versions d'un script de test.chauve-souris, test.cmd) sont dans le même dossier et que vous exécutez le script sans l'extension (de test), par défaut le .chauve-souris version du script sera exécuté, même sur une version 64 bits de Windows 7. L'ordre d'exécution est contrôlée par la variable d'environnement PATHEXT. Voir l' Ordre dans lequel l'Invite de Commande exécute des fichiers pour plus de détails.
Références:
wikipédia: Comparaison des interfaces de commande
Ces réponses sont un peu trop longues et axées sur l'utilisation interactive. Les différences importantes sont:
-
.cmd
empêche l'exécution par inadvertance sur les systèmes non-NT. -
.cmd
active les commandes intégrées pour changer Errorlevel à 0 en cas de succès.
Edit: les extensions de commande sont activées par défaut dans les fichiers .bat et .cmd sous Windows 2000 ou version ultérieure.
En 2012 et au-delà, je recommande d'utiliser .cmd
exclusivement.
J'ai trouvé une "chasse aux sorcières". Ils semblaient toujours interchangeables pour moi, c'est juste que .les fichiers bat ont été d'une façon originale, et puis .commandes cmd est apparu à un certain moment (je ne vais pas répéter tout le long réponses ci-dessus).
Ce qui est différent est la quantité de mémoire allouée.
J'ai essayé d'exécuter une application java dans l'invite de commande et il a travaillé avec le java -Xmx2G (donner 2 go de Ram) d'un commutateur.
L'exécution par programme à un petit batch appelé exécuteur testamentaire.chauve-souris, j'ai reçu un chargement de messages d'erreur du type "Erreur: impossible de créer la Machine Virtuelle Java" et le manque d'espace de tas.
De toute façon, la modification de l'exécuteur testamentaire.chauve-souris à l'exécuteur testamentaire.cmd résolu tous les problèmes. Espérons que cela aide certains vieux DOS garçon comme moi dans le futur!
Pas - il n'a pas d'importance dans le moindre. Sur NT le .chauve-souris et .cmd extension à la fois la cause de la cmd.exe processeur de traiter le fichier exactement de la même manière.
Des informations complémentaires sur command.com vs cmd.exe sur WinNT les systèmes de classe de MS TechNet (http://technet.microsoft.com/en-us/library/cc723564.aspx):
Ce comportement révèle une assez subtile fonctionnalité de Windows NT qui est très important. La 16-bit MS-DOS shell (COMMAND.COM fourni avec Windows NT est spécialement conçu pour Windows NT. Lorsqu'une commande est entré pour l'exécution par cette coquille, il n'a pas de l'exécution. Au lieu de cela, il paquets le texte de la commande et l'envoie en 32 bits CMD.EXE shell de commande pour l'exécution. Car toutes les commandes sont effectivement exécutées par CMD.EXE (le Windows NT shell de commande), le 16 bits shell hérite de toutes les caractéristiques et les les installations de l'complet de Windows NT shell.