내가 알기로, .bat
오래된 16 비트 명명 규칙이며 .cmd
32 비트 Windows, 즉 NT로 시작합니다. 그러나 나는 어디에서나 .bat 파일을 계속 보았으며 접미사를 사용하여 정확히 똑같이 작동하는 것처럼 보입니다. 내 코드는, 정말 내 배치 파일의 이름을 어떤 방법으로 상관이야 NT보다 오래된 아무것도 실행 할 필요가 없습니다, 또는 일부가 않을 것이라고 가정 잡았다 잘못된 접미사를 사용하여 저를 기다리고은?
내가 알기로, .bat
오래된 16 비트 명명 규칙이며 .cmd
32 비트 Windows, 즉 NT로 시작합니다. 그러나 나는 어디에서나 .bat 파일을 계속 보았으며 접미사를 사용하여 정확히 똑같이 작동하는 것처럼 보입니다. 내 코드는, 정말 내 배치 파일의 이름을 어떤 방법으로 상관이야 NT보다 오래된 아무것도 실행 할 필요가 없습니다, 또는 일부가 않을 것이라고 가정 잡았다 잘못된 접미사를 사용하여 저를 기다리고은?
답변:
에서 이 뉴스 그룹 게시물 에 의해 마크 즈비 코우 스키 자신 :
CMD.EXE에 관한 한 .CMD와 .BAT의 차이점은 다음과 같습니다. 확장을 사용하면 .CMD 파일의 PATH / APPEND / PROMPT / SET / ASSOC가 오류에 관계없이 ERRORLEVEL로 설정됩니다. .BAT는 오류에서만 ERRORLEVEL을 설정합니다.
다시 말해, ERRORLEVEL이 0이 아닌 것으로 설정되어 있고 그 명령 중 하나를 실행하면 ERRORLEVEL의 결과는 다음과 같습니다.
set var=..
문을 호출 할 때 오류 수준을 설정하지 않습니다 . 예상되는 동작이라고 가정했기 때문에 이상합니다. 두 가지 모두에 대한 논쟁이 이루어질 수있다. .bat 파일을 사용하겠습니다. :-)
DPATH /?
여전히 명령을 APPEND로 나열합니다. 또한 위키 기사는 DPATH를 나열하지 않는 한 대부분 수정되었습니다.
이 스레드의 다양한 답변과 인용 문헌에서 검증 된 정보를 모았습니다.
command.com
MS-DOS에 도입 된 16 비트 명령 프로세서이며 Win9x 시리즈 운영 체제에서도 사용되었습니다.cmd.exe
Windows NT의 32 비트 명령 프로세서입니다 (64 비트 Windows OS에도 64 비트 버전이 있음). cmd.exe
Windows 9x에 포함되지 않았습니다. OS / 2 버전 1.0에서 cmd
시작했으며 OS / 2 버전의 16 비트 가 시작되었습니다 (그러나 그럼에도 불구하고 같은 명령을 가진 완전한 보호 모드 프로그램이었습니다 start
). Windows NT cmd
는 OS / 2에서 상속 되었지만 Windows NT의 Win32 버전은 32 비트에서 시작되었습니다. 1992 년에 OS / 2가 32 비트 였지만 cmd
16 비트 OS / 2 1.x 프로그램 으로 남았습니다.ComSpec
ENV 변수를 정의하는 프로그램에 의해 시작됩니다 .bat
및 .cmd
스크립트. (WinNT로 시작하면 기본값은 cmd.exe
입니다.)cmd.exe
이전 버전과 호환됩니다 command.com
.cmd.exe
이름 .cmd
을 지정할 수 있습니다 . 이 파일 이름 확장자는 OS / 2 버전 1.0 및 1987로 거슬러 올라갑니다.다음은 cmd.exe
지원하지 않는 기능 목록입니다 command.com
.
^
(사용을 위해 : \ & | > < ^
)PUSHD
/POPD
SET /A i+=1
SET %varname:expression%
FOR /F
(이전에 존재했고 향상되었습니다)CALL :label
실행 순서 :
스크립트의 .bat 및 .cmd 버전 (test.bat, test.cmd)이 동일한 폴더에 있고 확장자 (test)없이 스크립트를 실행하면 기본적으로 스크립트의 .bat 버전이 실행됩니다. 64 비트 Windows 7에서. 실행 순서는 PATHEXT 환경 변수에 의해 제어됩니다. 자세한 내용은 명령 프롬프트가 파일 을 실행하는 순서 를 참조하십시오.
참고 문헌 :
위키 백과 : 명령 셸 비교
dir filename
하려면 : dir filename.*
command.com 과 동일합니다 . 와일드 카드는 cmd.exe에 필요합니다. command.com에서 rem Create an empty file > empty.txt
작동합니다. cmd.exe에는 없습니다.
이 답변은 너무 길어서 대화 형 사용에 중점을 둡니다. 스크립팅의 중요한 차이점은 다음과 같습니다.
.cmd
비 NT 시스템에서 실수로 실행되는 것을 방지합니다..cmd
내장 명령이 성공하면 Errorlevel을 0으로 변경할 수 있습니다.흥미롭지 않습니까?
이전에는 .cmd
파일에서 명령 확장이라고 하는 여러 가지 추가 기능이 활성화되었습니다 . 그러나 이제 Windows 2000 이상에서 파일 .bat
과 .cmd
파일 모두에 대해 기본적으로 사용됩니다 .
결론 : 2012 년 이후에는 .cmd
독점적으로 사용하는 것이 좋습니다 .
아니요-조금이라도 중요하지 않습니다. NT에서 .bat 및 .cmd 확장자는 모두 cmd.exe 프로세서가 파일을 정확히 동일한 방식으로 처리하게합니다.
MS TechNet ( http://technet.microsoft.com/en-us/library/cc723564.aspx )의 WinNT 클래스 시스템에서 command.com과 cmd.exe에 대한 추가 흥미로운 정보 :
이 동작은 매우 중요한 Windows NT의 미묘한 기능을 나타냅니다. Windows NT와 함께 제공되는 16 비트 MS-DOS 셸 (COMMAND.COM)은 Windows NT 용으로 특별히 설계되었습니다. 이 쉘에서 실행할 명령을 입력하면 실제로 실행되지는 않습니다. 대신 명령 텍스트를 패키지하여 실행을 위해 32 비트 CMD.EXE 명령 셸로 보냅니다. 모든 명령은 실제로 CMD.EXE (Windows NT 명령 셸)에 의해 실행되므로 16 비트 셸은 전체 Windows NT 셸의 모든 기능과 기능을 상속합니다.
command /c ver
command.com 시작과 ver 입력을 참조하십시오 .
RE : 분명히 command.com이 호출 될 때 약간 복잡한 미스터리입니다.
몇 달 전에 프로젝트를 진행하는 동안 CMD.EXE에서 실행하려는 일부 프로그램이 실제로 COMMAND.COM에서 실행되는 이유를 찾아야했습니다. 문제의 "프로그램"은 여전히 매일 실행되는 매우 오래된 .BAT 파일입니다.
배치 파일이 COMMAND.COM에서 실행 된 이유는 .PIF 파일 (고대)에서 시작 되었기 때문입니다. PIF를 통해서만 사용할 수있는 특수 메모리 구성 설정은 관련이 없으므로 일반적인 바탕 화면 바로 가기로 바꿨습니다.
바로 가기에서 시작된 동일한 배치 파일이 CMD.EXE에서 실행됩니다. 당신이 그것에 대해 생각할 때, 이것은 의미가 있습니다. 우리가 그것을 알아내는 데 너무 오래 걸렸던 이유는 부분적으로 스타트 업 그룹의 항목이 1998 년부터 생산 되었기 때문에 PIF라는 사실을 잊었 기 때문입니다.
여전히 Windows 7에서 BAT 파일은 다음과 같은 차이점이 있습니다. 동일한 디렉토리에 TEST.BAT 및 TEST.CMD 파일을 작성하고 해당 디렉토리에서 TEST를 실행하면 BAT 파일이 실행됩니다.
C:\>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
C:\Temp>echo echo bat > test.bat
C:\Temp>echo echo cmd > test.cmd
C:\Temp>test
C:\Temp>echo bat
bat
C:\Temp>
PATHEXT
변수에서 .BAT 확장자가 .CMD 확장자 앞에 있기 때문에 발생합니다 (이 답변에 표시된대로). PATHEXT에서이 순서를 수정하면 test.cmd가 대신 실행됩니다.
PATH
확장에 관계없이 환경 변수의 다른 디렉토리보다 우선한다는 점에 주목할 가치가 있습니다.
원래 게시물은 .bat 또는 .cmd 접미사 를 사용한 결과에 관한 것이기 때문에 반드시 파일 내부 의 명령은 아닙니다 ...
.bat와 .cmd의 또 다른 차이점은 동일한 파일 이름과 두 개의 확장자를 가진 두 파일이 존재하면 다음과 같습니다.
명령 행 에 filename 또는 filename .bat를 입력 하면 .bat 파일이 실행됩니다.
.cmd 파일을 실행하려면 filename .cmd 를 입력해야합니다
PATHEXT
환경 변수 에 따라 다릅니다 . 확장자가 명시되지 않은 순서는 확장자가 지정되지 않은 경우 우선 순위입니다. 또한 확장자가 env 변수에 나타나는 파일의 확장자를 지정할 필요는 없습니다.
배치에서 작동하는 모든 것은 cmd에서 작동해야합니다. cmd는 환경 제어를위한 일부 확장을 제공합니다. 또한 cmd는 새로운 cmd 인터프리터에서 실행되므로 NTVDM 에뮬레이트 된 16 비트 환경에서 bat가 실행될 때 더 빠르며 (짧은 파일에서는 눈에 띄지 않음) 안정적이어야합니다
.bat
NT의 DOS에서는 실행되지 않습니다. VDM은 프로그램에 필요한 경우에만 시작되며 .bat는 믿지만 64 비트 Windows에서는 지원되지 않습니다.
.cmd 및 .bat 파일 실행은 .cmd errorlevel 변수에서 명령 확장자의 영향을받는 명령에서 변경 될 수 있기 때문에 다릅니다. 그게 진짜야
@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
주제를 약간 벗어 났지만 Windows 스크립팅 호스트 를 고려 했습니까? 더 좋을 수도 있습니다.
차이점:
.cmd 파일은 실행되기 전에 메모리에로드됩니다. .bat 파일은 한 줄을 실행하고 다음 줄을 읽고 그 줄을 실행합니다 ...
스크립트 파일을 실행할 때이 문제를 발견 한 다음 실행이 완료되기 전에 편집 할 수 있습니다. bat 파일은 이것으로 엉망이되지만 cmd 파일은 그렇지 않습니다.
echo 1&pause
만든 다음 실행하십시오. 당신은 볼 1
과 Press any key to continue...
. 일시 정지 된 상태 echo 2&pause
에서 외부 편집기 로 새 줄 을 추가하십시오 . 키를 누릅니다. 당신은 볼 2
과 Press any key to continue...
. echo 3&pause
처음에 추가해 볼 수도 있습니다 . 그 후 다시 키를 누르면을 볼 수 2
있습니다.