Zoeken…


Invoering

Batch worden uitgevoerd met VBS functionaliteit en de betrouwbaarheid ervan verder vergroten. VBS kan bijvoorbeeld omgaan met decimalen, spaties en enkele andere geavanceerde bewerkingen die niet in batch kunnen worden uitgevoerd. Kan ook werken met WMI- en ActiveX-objecten.

Voer VBS uit met tijdelijk bestand (en)

De ouderwetse methode voor het uitvoeren van een ander script uit batch is om het script naar een andere locatie te echo en het vervolgens uit te voeren.

Deze methode kan als volgt worden weergegeven:

@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

De bovenstaande methode vereist veel echo (vbs) >> TempVBS.vbs , dus hier is een manier om het in te korten. (code door 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

De laatste methode is door streams . Een bestand kan een paar streams hebben. En elke stream kan verschillende informatie bevatten.

@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

Sluit vbscript-code in in batchbestand zonder tijdelijke bestanden te gebruiken

Hier is een voorbeeld met de techniek (hack) uitgevonden door Liviu, de gebruiker van het Dostips- forum:

@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>

Omdat het uitvoeren van wsf bestand met Windows- wsf extensiegevoelig is, kunt u een bestand met elke extensie uitvoeren door ?.wsf toe te voegen aan het einde van het bestand (wat de kern van de hack is). Hoewel het voorbeeld van Liviu waarschijnlijk robuuster is, is de bovenstaande code een vereenvoudigde versie. Omdat wsh niet veel geeft om de dingen buiten het knooppunt <package> bent u niet verplicht om alles in XML-opmerkingen te plaatsen. Hoewel het voorzichtig is met omleidingssymbolen ( < en > )



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow