batch-file
Гибриды Batch и VBS
Поиск…
Вступление
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. Хотя нужно быть осторожным с символами перенаправления ( <
и >
)