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 BAT
os CMD
scripts 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 ( 0
no ponto inicial) e abrindo o arquivo de script novamente do disco para o próximo comando.
1000
comandos em um script implicariam 1000
operaçõ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 BAT
e CMD
scripts.
Para prova: execute um script de amostra simplesignorandodica para apagar o arquivo; o type
pró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 found
o erro mostra que o analisador de lote não pode obter o próximo echo
comando:
==> 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, PowerShell
um script semelhante (por exemplo) é armazenado em cache na memória. Novamente, execute o script de exemploignorandodica para apagar o arquivo primeiro; o type
pró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 echo
estava Get-Content
armazenado 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