batch-file
バッチおよび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
が必要なので、短縮する方法があります。 (コード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
最後の方法は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
、ファイルの最後に?.wsf
(ハックの核心部分)を追加すると、任意の拡張子のファイルを実行できます。 Liviuの例はおそらくより堅牢ですが、上記のコードはより単純化されたバージョンです。 wshは<package>
ノード以外のものについてはあまり気にしないので、xmlコメントにすべてを入れる必要はありません。リダイレクション記号( <
と>
)は注意が必要ですが、
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow