Поиск…


Вступление

Batch способен работать с функциональностью VBS повышая их надежность. Например, VBS может иметь дело с десятичными знаками, пробелами и некоторыми другими расширенными операциями, которые невозможно выполнить в batch . Также он способен работать с объектами WMI и ActiveX.

Запустите VBS с временными файлами

Метод старой школы для запуска другого скрипта из batch - это echo сценарий в другом месте, а затем запустить его.

Этот метод может быть представлен следующим образом:

@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

Вышеупомянутый метод потребует много echo (vbs) >> TempVBS.vbs , так что это способ сократить его. (код Аачини)

@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

Последний метод - использование streams . Файл может иметь несколько потоков. И каждый поток может содержать различную информацию.

@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

Вставить код vbscript в пакетный файл без использования временных файлов

Вот пример с техникой (взлома), изобретенной пользователем пользовательских форумов dostips 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>

Поскольку запуск wsf файла с хостом Windows-скрипта является чувствительным к расширению, вы можете запустить файл с любым расширением, добавив ?.wsf в конец файла (который является ядром взлома). Хотя пример Liviu, вероятно, более надежный, приведенный выше код является более упрощенной версией. Поскольку wsh не заботится о вещах вне узла <package> вы не обязаны помещать все в комментарии xml. Хотя нужно быть осторожным с символами перенаправления ( < и > )



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow