Qual é a diferença entre os arquivos .cmd e .bat?

28

Apenas curioso. As pessoas "legais" em nossa empresa sempre usam * .cmd, enquanto ninguém foi capaz de explicar a diferença para mim.

Artem Tikhomirov
fonte

Respostas:

11

Existem diferenças semânticas na linguagem de comando usada para cada um (os .batarquivos obtêm uma versão de compatibilidade). Algumas delas podem ser ilustradas por este script daqui :

@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

Basicamente, os .cmdarquivos obtêm a versão atual e mais sexy da linguagem de comando da MS, e é por isso que as crianças legais os usam.

caos
fonte
2
<3 ofuscado roteiros cmd :)
grawity
Yeesh! Eu estou corrigido. Eu nunca conheci esse comportamento do CMD.EXE antes.
Evan Anderson
6

De acordo com a Wikipedia:

.bat: a primeira extensão usada pela Microsoft para arquivos em lote. Essa extensão pode ser executada na maioria dos sistemas operacionais da Microsoft, incluindo o MS-DOS e a maioria das versões do Microsoft Windows.

.cmd: A extensão .cmd mais recente é descrita pelos sistemas baseados no Windows NT como um 'Script de Comando do Windows NT' e é útil, pois o uso de uma extensão .cmd em vez de uma extensão .bat significa que as versões anteriores do Windows não saberão como executá-lo, para que eles não tentem e confundam os comandos dos arquivos de estilo do COMMAND.COM e falhem ao executar os novos comandos de estilo devido à falta de extensões de comando, resultando em scripts sendo executados apenas parcialmente, o que pode ser prejudicial (por exemplo: falha ao verificar a cópia bem-sucedida de um arquivo e excluir o original de qualquer maneira).

A única diferença conhecida entre o processamento de arquivos .cmd e .bat é que, em um arquivo .cmd, a variável ERRORLEVEL é alterada mesmo em um comando bem-sucedido que é afetado pelas extensões de comando (quando as extensões de comando estão ativadas), enquanto que em arquivos .bat a variável ERRORLEVEL muda somente com erros.

Espero que isto ajude.

KPWINC
fonte
1

Em teoria, o .cmd é mais "verdadeiro" :) porque o .bat é um script para o antigo command.com do DOS, enquanto o .cmd é para o cmd.exe do Windows NT, o último possui um pouco mais de scripts aprimorados. Na vida real, geralmente ambos são iguais, como escrever / bin / sh ou / bin / bash no Linux (distros médios em que sh é realmente bash)

disserman
fonte
0

Vi pela primeira vez o formato .cmd usado no OS / 2. Se você está pensando em termos do DOS, é como um arquivo .bat em esteróides. Os arquivos .bat foram introduzidos primeiro nos SOs do tipo DOS. Muita sintaxe é semelhante, exceto quando você começa a entrar em funções avançadas. Além disso, um arquivo .cmd pode não funcionar em um ambiente de 16 bits (win98), enquanto um arquivo .bat provavelmente funcionará em todos os ambientes.

Pete
fonte