Suche…


Einführung

Batch kann mit VBS Funktionalität ausgeführt werden, was die Zuverlässigkeit weiter erhöht. Beispielsweise kann VBS Dezimalzahlen, Leerzeichen und andere erweiterte Vorgänge behandeln, die nicht im batch . Kann auch mit WMI- und ActiveX-Objekten arbeiten.

VBS mit temporären Dateien ausführen

Die alte Methode zum Ausführen eines anderen Skripts aus dem batch ist das echo des Skripts an einem anderen Ort und das Ausführen des Skripts.

Diese Methode kann folgendermaßen dargestellt werden:

@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

Die obige Methode würde viel echo (vbs) >> TempVBS.vbs erfordern. (Code von 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

Die letzte Methode ist die Verwendung von streams . Eine Datei kann einige Streams haben. Und jeder Stream kann unterschiedliche Informationen enthalten.

@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

Betten Sie den Vbscript-Code in die Batchdatei ein, ohne temporäre Dateien zu verwenden

Hier ist ein Beispiel mit der Technik (Hack), die vom Benutzer des Dostips-Forums Liviu entwickelt wurde:

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

Da die Ausführung der wsf Datei mit dem Windows- wsf Erweiterung wsf ist, können Sie eine Datei mit einer beliebigen Erweiterung ?.wsf indem ?.wsf am Ende der Datei ?.wsf (das ist der Kern des Hacks) hinzufügen. Während das Beispiel von Liviu wahrscheinlich robuster ist, ist der obige Code eine vereinfachte Version. Da sich wsh nicht um die Dinge außerhalb des <package> -Knotens kümmert, sind Sie nicht verpflichtet, alles in XML-Kommentare zu schreiben. Vorsicht bei Umleitungssymbolen ( < und > )



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow