如何在批处理文件中将vbs保存在多行中的一个命令中

时间:2013-10-19 21:02:57

标签: batch-file command-line vbscript save

我想将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文件,而不会让批处理文件认为我希望他做多个命令。

2 个答案:

答案 0 :(得分: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,它们可能更容易编写。请确保在VBS之前有exit /b

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

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

答案 1 :(得分:3)

  

首选:

使用聚合操作符()对您使用的命令进行组合,并使用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"