Sök…


Introduktion

Batch kan köras med VBS funktionalitet, vilket ytterligare ökar deras tillförlitlighet. Till exempel kan VBS hantera decimaler, mellanslag och vissa andra avancerade operationer som inte kan utföras i batch . Kan också arbeta med WMI och ActiveX-objekt.

Kör VBS med tillfälliga filer

Den gamla skolmetoden för att köra ett annat skript från batch är att echo skriptet till en annan plats och sedan köra det.

Den här metoden kan representeras på följande sätt:

@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

Metoden ovan kräver massor av echo (vbs) >> TempVBS.vbs , så här är ett sätt att förkorta det. (kod av 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

Den sista metoden är att använda streams . En fil kan ha några strömmar. Och varje ström kan innehålla annan information.

@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

Bädda in vbscript-kod i batchfilen utan att använda tillfälliga filer

Här är ett exempel med tekniken (hack) uppfann av dostipsforums användare Liviu:

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

Eftersom köra wsf fil med Windows-skriptvärd är förlängningskänslig kan du köra en fil med vilken förlängning som helst genom att lägga till ?.wsf i slutet av filen (som är kärnan i hacket). Medan Liviu-exemplet förmodligen är mer robust är koden ovan en mer förenklad version. Eftersom wsh inte bryr sig mycket om sakerna utanför <package> -noden, är du inte skyldig att lägga allt i xml-kommentarer. Även om det är att vara försiktig med omdirigeringssymboler ( < och > )



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow