CMD スクリプトは BAT スクリプトよりも高速に実行されますか?

CMD スクリプトは BAT スクリプトよりも高速に実行されますか?

最近、Windows 管理者は BAT ログオン スクリプトよりも CMD ログオン スクリプトを使用するべきだという話を誰かから聞きました。実行速度が速いからです。どうやら 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

関連情報