Recherche…


Introduction

Batch sont capables de fonctionner avec les fonctionnalités VBS , augmentant encore leur fiabilité. Par exemple, VBS peut gérer les décimales, les espaces et certaines autres opérations avancées qui ne peuvent pas être effectuées par batch . Est également capable de travailler avec des objets WMI et ActiveX.

Exécuter VBS avec des fichiers temporaires

L'ancienne méthode pour exécuter un autre script à partir d'un batch consiste à echo au script dans un autre emplacement, puis à l'exécuter.

Cette méthode peut être représentée comme ceci:

@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

La méthode ci-dessus nécessiterait beaucoup d' echo (vbs) >> TempVBS.vbs , alors voici un moyen de le raccourcir. (code par 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

La dernière méthode consiste à utiliser des streams . Un fichier peut avoir quelques flux. Et chaque flux peut contenir des informations différentes.

@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

Intégrer du code vbscript dans un fichier de commandes sans utiliser de fichiers temporaires

Voici un exemple avec la technique (hack) inventée par l'utilisateur Liviu des forums 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>

Comme exécuter wsf fichier wsf avec Windows script host est sensible aux extensions, vous pouvez exécuter un fichier avec n'importe quelle extension en ajoutant ?.wsf à la fin du fichier (qui est le noyau du hack). Alors que l'exemple de Liviu est probablement plus robuste, le code ci-dessus est une version plus simplifiée. Comme wsh ne se soucie guère des choses en dehors du nœud <package> vous n'êtes pas obligé de tout mettre dans les commentaires XML. Bien que ce soit prudent avec les symboles de redirection ( < et > )



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow