CMD 스크립트는 BAT 스크립트보다 빠르게 실행됩니까?

CMD 스크립트는 BAT 스크립트보다 빠르게 실행됩니까?

최근 누군가로부터 Windows 관리자가 더 빠르게 실행하려면 BAT 로그온 스크립트 대신 CMD 로그온 스크립트를 사용해야 한다는 말을 들었습니다. 분명히 BAT 스크립트는 느린 것으로 악명이 높습니다.

나는 약간의 Google을 수행했지만 그 주장을 뒷받침할 증거를 찾을 수 없습니다. 이것이 신화인지 아니면 이에 대해 더 이상 알 수 있는 사람이 있는지 궁금합니다.

답변1

스크립트가 작동하는 방식 BAT과 스크립트 의 일부 차이점에 관계없이CMD여기서 논의됨‌(공로로 인해해머의 코멘트), 명령이 구문 분석되고 실행됩니다.차례로이로써 다음 명령 오프셋( 0시작점에서)을 기억하고 다음 명령을 위해 디스크에서 스크립트 파일을 다시 엽니다.

1000스크립트의 명령은 1000동일한 파일에 대한 디스크 작업(열기-읽기-닫기)을 의미합니다. 정확성을 위해 나는 그것에 대해 말하지 않습니다윤곽하지만 약명령.
그건BAT두 가지 와 CMD스크립트 속도 저하 의 실제 원인.

증명을 위해: 간단한 샘플 스크립트 실행묵살파일을 지우라는 힌트; 스크립트 type자체는 다음과 같습니다.

==> 725431.cmd
725431.cmd script. Please follow instructions.
Press any key to continue . . .
Please erase d:\bat\725431.cmd file prior to continuing.
Press any key to continue . . .
you didn't erase d:\bat\725431.cmd file prior to continuing?
---
@echo off
echo %~nx0 script. Please follow instructions.
pause
echo Please erase %~f0 file prior to continuing.
pause
echo you didn't erase %~f0 file prior to continuing?
echo ---
type "%~f0"

위 스크립트 실행관찰하다파일을 지우라는 힌트; The batch file cannot be found오류는 배치 파서가 다음 echo명령을 가져올 수 없음을 나타냅니다.

==> 725431.cmd
725431.cmd script. Please follow instructions.
Press any key to continue . . .
Please erase d:\bat\725431.cmd file prior to continuing.
Press any key to continue . . .
The batch file cannot be found.

완전성을 기하기 위해 표준 파일 시스템 오류 메시지는 다음과 같습니다.

==> type 725431.cmd
The system cannot find the file specified.

반대로 유사한(예를 들어) PowerShell스크립트가 메모리에 캐시됩니다. 다시 샘플 스크립트를 실행하세요.묵살먼저 파일을 지우라는 힌트; 스크립트 type자체는 다음과 같습니다.

PS D:\PShell> D:\PShell\SF\725431.ps1
D:\PShell\SF\725431.ps1 script. Please follow instructions.
Press Enter to continue...: 
Please erase D:\PShell\SF\725431.ps1 file prior to continuing.
Press Enter to continue...: 
you didn't erase D:\PShell\SF\725431.ps1 file prior to continuing?
---
echo "$PSCommandPath script. Please follow instructions."
pause
echo "Please erase $PSCommandPath file prior to continuing."
pause
echo "you didn't erase $PSCommandPath file prior to continuing?"
echo "---"
Get-Content $PSCommandPath

스크립트 실행관찰하다파일을 지우라는 힌트를 받으세요. 그렇게 하면 후자 echoGet-Content메모리에 캐시되었음을 알 수 있습니다.

PS D:\PShell> D:\PShell\SF\725431.ps1
D:\PShell\SF\725431.ps1 script. Please follow instructions.
Press Enter to continue...: 
Please erase D:\PShell\SF\725431.ps1 file prior to continuing.
Press Enter to continue...: 
you didn't erase D:\PShell\SF\725431.ps1 file prior to continuing?
---
Get-Content : Cannot find path 'D:\PShell\SF\725431.ps1' because it does not ex
ist.
At D:\PShell\SF\725431.ps1:8 char:1
+ Get-Content $PSCommandPath
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (D:\PShell\SF\725431.ps1:String) 
    [Get-Content], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetCo 
   ntentCommand

관련 정보