2

次のようなバッチ ファイルに vbs ファイルを保存したいと思います。

echo set shell = createobject("wscript.shell")
wscript.sleep(1000)
shell.sendkeys("blablabla")
Shell.SendKeys "{Enter}"
wscript.sleep(1000) >"c:\folder\blablabla.vbs"

しかし、バッチファイルは機能しません。このようにすると(vbsコードを1行で入力すると):

echo set shell = createobject("wscript.shell") wscript.sleep(1000) shell.sendkeys("blablabla") Shell.SendKeys "{Enter}" wscript.sleep(1000) >"c:\folder\blablabla.vbs"

その場合、vbs ファイルは機能しません。だから私の質問は、バッチファイルに複数のコマンドを実行させたいと思わせることなく、vbsファイルを正しく保存するにはどうすればよいですか。

4

2 に答える 2

4

ここに別の方法があります。は:::VBS では無害で、バッチではコメントのように機能します。特に優れているのは、VBS コードのエスケープについて心配する必要がないことです。

選択:::したのは、バッチ スクリプトの他の場所に現れる可能性が低いためです。一方:、バッチ ラベルで::使用され、バッチ コメントとして頻繁に使用されます。

::: set shell = createobject("wscript.shell")
::: wscript.sleep(1000)
::: shell.sendkeys("blablabla")
::: Shell.SendKeys "{Enter}"
::: wscript.sleep(1000)
findstr /b ::: "%~f0" >"c:\folder\blablabla.vbs"

VBS の開始を示す文字列のみを必要とするその他のオプションを次に示します。大量の VBS を処理する場合は、より簡単に記述できます。exit /bVBSの前に必ず持ってください。

この 2 番目のオプションは遅く、現在書かれているように空行を取り除きます。

@echo off
setlocal
set "vbs=test.vbs"
for /f "delims=:" %%N in ('findstr /nb ":: begin VBS" "%~f0"') do set "skip=%%N"
(for /f usebackq^ skip^=%skip%^ delims^=^ eol^= %%A in ("%~f0") do echo %%A) >"%vbs%"
cscript /nologo "%vbs%"
del "%vbs%"
exit /b

:: begin VBS
set shell = createobject("wscript.shell")
wscript.sleep(1000)
shell.sendkeys("dir *.h*")
Shell.SendKeys "{Enter}"
wscript.sleep(1000)

この 3 番目のオプションは高速ですが、MORE はタブを一連のスペースに変換します。

@echo off
setlocal
set "vbs=test.vbs"
for /f "delims=:" %%N in ('findstr /nb ":: begin VBS" "%~f0"') do set "skip=%%N"
more +%skip% "%~f0" >"%vbs%"
cscript /nologo "%vbs%"
del "%vbs%"
exit /b

:: begin VBS
set shell = createobject("wscript.shell")
wscript.sleep(1000)
shell.sendkeys("dir *.h*")
Shell.SendKeys "{Enter}"
wscript.sleep(1000)
于 2013-10-20T03:12:13.790 に答える
4

最初に選んだ:

グループ化演算子を使用して必要なコマンドをグループ化し、 を使用してコード内の()競合する演算子をエスケープします。Batch^

(
 echo set shell = createobject^("wscript.shell"^)
 echo wscript.sleep^(1000^)
 echo shell.sendkeys^("blablabla"^)
 echo Shell.SendKeys "{Enter}"
 echo wscript.sleep^(1000^)
)>"c:\folder\blablabla.vbs"

第二希望

命令を連結するには、演算子VBScriptを使用する必要があります。:オールインワンの行コードは次のようになります。

echo set shell = createobject^("wscript.shell"^) : wscript.sleep^(1000^) : shell.sendkeys^("blablabla"^) : Shell.SendKeys "{Enter}" : wscript.sleep^(1000^) >"c:\folder\blablabla.vbs"
于 2013-10-19T21:06:56.437 に答える