batch-file
Híbridos por lotes y JSCript
Buscar..
Introducción
JScript
es en realidad el superconjunto de Javascript
(es la versión 1.8.1, por lo que algunas de las funciones más recientes no están disponibles), y se pueden incrustar en un script por batch
para ampliar las funciones de batch
scripts por batch
. Por lo general, las técnicas de incrustación utilizan las directivas de JScript (que no forman parte del estándar oficial de Javascript) para separar el lote y el código de JScript. JScript le permite trabajar con objetos Com / ActiveX, así como con objetos WMI además del Javascript estándar.
JScript incrustado en un archivo por lotes
Este siguiente ejemplo es creado por el usuario Michael Dillon a partir de esta respuesta .
Considere el siguiente script:
@set @junk=1 /*
@echo off
cscript //nologo //E:jscript %0 %*
goto :eof
*/
//JScript aka Javascript here
Este fragmento de script hace:
Ejecute el comando
cscript
que se llama a sí mismo con todos los argumentos proporcionados.Como la parte después de
@set @junk=1
se comenta (/*
y*/
son comentarios válidos de JScript),JScript los ignorará.
Nota: Necesitamos la parte
@set @junk=1
porque el archivo por lotes no reconoce/*
como un comando, pero una declaración deset
será una solución alternativa. JScript reconocerá/*
como un comentario, por lo que el otro archivo porbatch
no será ejecutado por el motor de JScript.
Puede agregar su JScript después de */
y comenzar a extender sus scripts de archivos por lotes.
Ejecutar JScript con archivos temporales
Como se mencionó aquí , el método de la vieja escuela para ejecutar otro script es mediante el uso de archivos temporales. Simplemente haga echo
en un archivo y luego ejecútelo (y elimínelo opcionalmente).
Aquí está el concepto básico:
@echo off
echo //A JS Comment > TempJS.js
echo //Add your code>>TempJS.js
cscript //nologo //e:cscript.exe TempJS.js
del /f /s /q TempJS.js
Pero esto requeriría muchas declaraciones de echo
para crear un JScript relativamente grande. Aquí hay un método mejor por Aacini.
@echo off
setlocal
rem Get the number of the "<resource>" line
for /F "delims=:" %%a in ('findstr /N "<resource>" "%~F0"') do set "start=%%a"
rem Skip such number of lines and show the rest of this file
(for /F "usebackq skip=%start% delims=" %%a in ("%~F0") do echo %%a) > TempJS.js
cscript //nologo //e:cscript.txt TempJS.js
del /f /s /q TempJS.js
goto :EOF
<resource>
JScript
JScript
JScript