Сценарии CMD работают быстрее, чем сценарии BAT?

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

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

0
задан 29 September 2015 в 09:32
1 ответ

Несмотря на некоторые различия в том, как скрипты BAT и CMD работают как , обсуждаемые здесь (в силу заслуг Комментарий Хаммера ), команды анализируются и выполняются одна за другой , запоминая смещение следующей команды ( 0 в начальной точке) и снова открывая файл сценария с диска для следующей команды.

1000 команд в сценарии означают 1000 дисковых операций (открытие-чтение-закрытие) с одним и тем же файлом. Для точности я говорю не о строках , а о командах .
Это реальный источник медлительности сценариев BAT и CMD .

Для доказательства: запустите простой пример сценария , игнорируя подсказку для удаления файл; сценарий сам наберет :

==> 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"

Выполнить указанный выше сценарий , наблюдая подсказку, чтобы стереть файл; Пакетный файл не может быть найден. Ошибка показывает, что пакетный анализатор не может получить следующую команду 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 кешируется в памяти. Снова запустите пример сценария , игнорируя подсказку , чтобы сначала стереть файл; сценарий сам наберет :

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
0
ответ дан 24 November 2019 в 08:01

Теги

Похожие вопросы