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 代码):

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

第一选择:

使用 agroupation 运算符对您想要的命令进行分组(),并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 回答
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 /b之前的VBS。

第二个选项速度较慢,它会删除当前写入的空行。

@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)

这第三个选项很快,但 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 回答