Buscar..


Introducción

Batch son capaces de ejecutarse con la funcionalidad VBS , lo que aumenta aún más su confiabilidad. Por ejemplo, VBS puede lidiar con decimales, espacios y algunas otras operaciones avanzadas que no se pueden realizar por batch . También es capaz de trabajar con objetos WMI y ActiveX.

Ejecutar VBS con archivo (s) temporal (s)

El método de la vieja escuela para ejecutar otra secuencia de comandos de un batch es hacer echo la secuencia de comandos en otra ubicación, y luego ejecutarlo.

Este método se puede representar así:

@echo off
rem VBS below
    echo your vbs > TempVBS.vbs
    echo other vbs>>TempVBS.vbs
rem End of VBS

cscript //nologo TempVBS.vbs
del /f /s /q TempVBS.vbs

El método anterior requeriría mucho echo (vbs) >> TempVBS.vbs , así que aquí hay una manera de acortarlo. (código de 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) > Program.vbs

cscript //nologo Program.vbs
del /f /s /q Program.vbs
exit /b

<resource>
your vbs
another line of vbs

El último método es mediante el uso de streams . Un archivo puede tener algunas secuencias. Y cada flujo puede contener información diferente.

@echo off

    echo vbs >%0:stream1
    rem This command redirect "vbs" into the stream1 of this script, then we can call it later

cscript %0:stream1 //nologo
   rem if you like, you can clear the stream1 of this file by:
   type nul>%0:stream1

Incruste código vbscript en un archivo por lotes sin usar archivos temporales

Aquí hay un ejemplo con la técnica (hack) inventada por el usuario Liviu de los foros de dostips :

@echo off
echo Printed by CMD.EXE
cscript //nologo "%~f0?.wsf" //job:JS //job:VBS

exit /b %errorlevel%

----END OF BATCH CODE---
<package>
  <job id="JS"> 
    <script language="VBScript">
    
        WScript.Echo("Printed by VBScript"):
        
    </script>
  </job>
  <job id="VBS"> 
    <script language="JScript">
    
        WScript.Echo("Printed by JScript");
        
    </script>
  </job>
</package>

Dado que la ejecución del archivo wsf con el host del script de Windows es sensible a la extensión, puede ejecutar un archivo con cualquier extensión agregando ?.wsf al final del archivo (que es el núcleo del hack). Si bien el ejemplo de Liviu es probablemente más robusto, el código anterior es una versión más simplificada. Como a wsh no le importan las cosas que están fuera del nodo <package> no está obligado a poner todo en comentarios xml. Aunque hay que tener cuidado con los símbolos de redirección ( < y > )



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow