Ricerca…


introduzione

Batch sono in grado di funzionare con funzionalità VBS aumentando ulteriormente la loro affidabilità. Ad esempio, VBS può gestire decimali, spazi e altre operazioni avanzate che non possono essere eseguite in batch . Inoltre è in grado di lavorare con oggetti WMI e ActiveX.

Esegui VBS con file temporanei

Il metodo old-school per l'esecuzione di un altro script da batch consiste nel echo lo script in un'altra posizione, quindi eseguirlo.

Questo metodo può essere rappresentato in questo modo:

@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

Il metodo sopra richiederebbe un sacco di echo (vbs) >> TempVBS.vbs , quindi ecco un modo per accorciarlo. (codice di 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

L'ultimo metodo è utilizzando gli streams . Un file può avere alcuni flussi. E ogni stream può contenere informazioni diverse.

@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

Incorpora il codice vbscript in un file batch senza utilizzare i file temporanei

Ecco un esempio con la tecnica (hack) inventata dall'utente Liviu del forum 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>

Poiché l'esecuzione del file wsf con host di script di Windows è sensibile alle estensioni, è possibile eseguire un file con qualsiasi estensione aggiungendo ?.wsf alla fine del file (che è il nocciolo dell'hack). Mentre l'esempio di Liviu è probabilmente più robusto, il codice sopra è una versione più semplificata. Siccome wsh non si preoccupa molto delle cose al di fuori del nodo <package> non sei obbligato a mettere tutto nei commenti xml. Anche se bisogna fare attenzione ai simboli di reindirizzamento ( < e > )



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow