Recientemente escuché de alguien que los administradores de Windows deberían usar scripts de inicio de sesión CMD en lugar de scripts de inicio de sesión BAT, ya que se ejecutan más rápido. Aparentemente los scripts BAT son notoriamente lentos.
He buscado un poco en Google y no puedo encontrar ninguna evidencia que respalde esa afirmación. Me pregunto si esto es un mito o si alguien puede saber más sobre esto.
Respuesta1
Independientemente de algunas diferencias en cómo funcionan los scripts BAT
y CMD
comodiscutido aquí(en virtud de méritocomentario de martillo), los comandos se analizan y ejecutanUno después del otroPor la presente, recordamos el desplazamiento del siguiente comando ( 0
en el punto inicial) y abrimos el archivo de script nuevamente desde el disco para el siguiente comando.
1000
Los comandos en un script implicarían 1000
operaciones de disco (abrir-leer-cerrar) en el mismo archivo. Para ser exactos, no hablo delíneaspero sobrecomandos.
Eso esfuente real de lentitud tanto de los scripts BAT
como de los scriptsCMD
.
Como prueba: ejecute un script de muestra simplepostergaciónsugerencia para borrar el archivo; el guión sería type
en sí mismo:
==> 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"
Ejecutar el script anteriorobservandosugerencia para borrar el archivo; The batch file cannot be found
El error muestra que el analizador por lotes no puede obtener el siguiente 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, aquí hay un mensaje de error estándar del sistema de archivos:
==> type 725431.cmd
The system cannot find the file specified.
Por el contrario, PowerShell
un script similar (por ejemplo) se almacena en caché en la memoria. Nuevamente, ejecute el script de muestrapostergaciónsugerencia para borrar el archivo primero; el guión sería type
en sí mismo:
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
Ejecute el scriptobservandosugerencia para borrar el archivo. Hacer eso mostraría que estos últimos echo
estaban Get-Content
almacenados en caché en la memoria:
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