Выполняются ли скрипты CMD быстрее, чем скрипты BAT?

Выполняются ли скрипты CMD быстрее, чем скрипты BAT?

Недавно я услышал от кого-то, что администраторам Windows следует использовать скрипты входа CMD вместо скриптов входа BAT, так как они работают или выполняются быстрее. По-видимому, скрипты BAT печально известны своей медлительностью.

Я немного погуглил и не нашел никаких доказательств в поддержку этого заявления. Мне просто интересно, миф ли это или кто-то может знать об этом больше?

решение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

Запустить скриптнаблюдаяподсказка стереть файл. Сделав это, мы увидим, что последний echoи Get-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

Связанный контент