batch-file
Batch- en VBS-hybriden
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 >
)