¿Los scripts CMD se ejecutan más rápido que los scripts BAT?

¿Los scripts CMD se ejecutan más rápido que los scripts BAT?

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 BATy CMDcomodiscutido 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 ( 0en el punto inicial) y abrimos el archivo de script nuevamente desde el disco para el siguiente comando.

1000Los comandos en un script implicarían 1000operaciones 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 BATcomo de los scriptsCMD.

Como prueba: ejecute un script de muestra simplepostergaciónsugerencia para borrar el archivo; el guión sería typeen 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 foundEl error muestra que el analizador por lotes no puede obtener el siguiente 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, 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, PowerShellun 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 typeen 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 echoestaban Get-Contentalmacenados 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

información relacionada