Werden CMD-Skripte schneller ausgeführt als BAT-Skripte?

Werden CMD-Skripte schneller ausgeführt als BAT-Skripte?

Ich habe kürzlich von jemandem gehört, dass Windows-Administratoren CMD-Anmeldeskripte anstelle von BAT-Anmeldeskripten verwenden sollten, da diese schneller ausgeführt werden. Anscheinend sind BAT-Skripte notorisch langsam.

Ich habe ein bisschen gegoogelt und kann keine Beweise finden, die diese Behauptung stützen. Ich frage mich nur, ob das ein Mythos ist oder ob irgendjemand mehr darüber wissen kann?

Antwort1

Ungeachtet einiger Unterschiede in der Funktionsweise BATund CMDSkriptehier besprochen‌(aufgrund verdienstvollerHammers Kommentar), Befehle werden analysiert und ausgeführteiner nach demanderenDadurch wird der Offset des nächsten Befehls ( 0am Startpunkt) gespeichert und die Skriptdatei für den nächsten Befehl erneut von der Festplatte geöffnet.

1000Befehle in einem Skript würden 1000Festplattenoperationen (Öffnen-Lesen-Schließen) für dieselbe Datei bedeuten. Der Genauigkeit halber erzähle ich nicht vonLinienaber überBefehle
Das istwahre Quelle der Langsamkeit beider BATund CMDSkripte.

Zum Beweis: Führen Sie ein einfaches Beispielskript ausignorierendHinweis zum Löschen der Datei; das Skript würde typeselbst:

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

Führen Sie das obige Skript ausBeobachtenHinweis zum Löschen der Datei; The batch file cannot be foundder Fehler zeigt, dass der Batch-Parser den nächsten echoBefehl nicht abrufen kann:

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

Der Vollständigkeit halber hier eine Standardfehlermeldung des Dateisystems:

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

Im Gegenteil, ähnliche (zum Beispiel) PowerShellSkripte werden im Speicher zwischengespeichert. Führen Sie das Beispielskript erneut ausignorierendTipp, zuerst die Datei zu löschen. Das Skript würde typeFolgendes tun:

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

Ausführen des SkriptsBeobachtenHinweis zum Löschen der Datei. Dadurch würde angezeigt, dass letztere echound Get-Contentim Speicher zwischengespeichert wurden:

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

verwandte Informationen