Os scripts CMD são executados mais rapidamente que os scripts BAT?

Os scripts CMD são executados mais rapidamente que os scripts BAT?

Recentemente ouvi de alguém que os administradores do Windows deveriam usar scripts de logon CMD em vez de scripts de logon BAT, pois são executados ou executados mais rapidamente. Aparentemente, os scripts BAT são notoriamente lentos.

Pesquisei um pouco no Google e não consigo encontrar nenhuma evidência para apoiar essa afirmação. Só estou me perguntando se isso é um mito ou se alguém pode saber mais sobre isso?

Responder1

Independentemente de algumas diferenças em como BATos CMDscripts funcionam comodiscutido aqui‌(em virtude de méritoComentário de Martelo), os comandos são analisados ​​e executadosum após o outrolembrando o próximo deslocamento do comando ( 0no ponto inicial) e abrindo o arquivo de script novamente do disco para o próximo comando.

1000comandos em um script implicariam 1000operações de disco (abrir-ler-fechar) no mesmo arquivo. Por uma questão de exatidão, não estou falando sobrelinhasmas sobrecomandos.
Isso éfonte real de lentidão de ambos BATe CMDscripts.

Para prova: execute um script de amostra simplesignorandodica para apagar o arquivo; o typepróprio script seria:

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

Execute o script acimaobservandodica para apagar o arquivo; The batch file cannot be foundo erro mostra que o analisador de lote não pode obter o próximo echocomando:

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

Para completar, aqui está uma mensagem de erro padrão do sistema de arquivos:

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

Pelo contrário, PowerShellum script semelhante (por exemplo) é armazenado em cache na memória. Novamente, execute o script de exemploignorandodica para apagar o arquivo primeiro; o typepróprio script seria:

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

Execute o scriptobservandodica para apagar o arquivo. Fazer isso mostraria que o último echoestava Get-Contentarmazenado em cache na memória:

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

informação relacionada