Szukaj…


Wprowadzenie

Batch może działać z funkcją VBS dodatkowo zwiększa ich niezawodność. Na przykład VBS może radzić sobie z miejscami po przecinku, spacjami i innymi zaawansowanymi operacjami, których nie można wykonać batch . Jest również zdolny do pracy z obiektami WMI i ActiveX.

Uruchom VBS z plikami tymczasowymi

Tradycyjną metodą uruchamiania kolejnego skryptu z batch jest echo skryptu w innej lokalizacji, a następnie uruchomienie go.

Metodę tę można przedstawić w następujący sposób:

@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

Powyższa metoda wymaga dużo echo (vbs) >> TempVBS.vbs , więc oto sposób na jej skrócenie. (kod 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

Ostatnia metoda polega na użyciu streams . Plik może mieć kilka strumieni. I każdy strumień może zawierać inne informacje.

@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

Osadź kod vbscript w pliku wsadowym bez użycia plików tymczasowych

Oto przykład z techniką (hack) wymyśloną przez użytkownika Liviu na 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>

Ponieważ uruchomienie pliku wsf z hostem skryptów systemu Windows jest wrażliwe na rozszerzenie, możesz uruchomić plik z dowolnym rozszerzeniem, dodając ?.wsf na końcu pliku (który jest rdzeniem ?.wsf ). Chociaż przykład Liviu jest prawdopodobnie bardziej niezawodny, powyższy kod jest bardziej uproszczoną wersją. Ponieważ wsh nie dba o rzeczy poza węzłem <package> , nie jesteś zobowiązany do umieszczania wszystkiego w komentarzach xml. Chociaż należy zachować ostrożność przy symbolach przekierowania ( < i > )



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow