2013-10-19 39 views
2

一個命令我想保存一個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代碼):

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

那麼vbs文件不起作用。 所以我的問題是:如何正確保存vbs文件,而不會讓批處理文件認爲我希望他執行多個命令。

回答

3

第一選擇:

Agroupate命令你WANR使用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" 
+0

非常感謝您的快速回答。我有一個新問題。保存的vbs文件也在工作。但是,當我打開批處理文件,然後它不啓動vbs文件,它只是簡單地啓動CMD,我不知道爲什麼,你能幫我嗎? –

+0

不客氣,但由於您沒有提供批處理文件的代碼,該代碼嘗試調用您的意思,那麼我無法知道問題出在哪裏,也許您會考慮標記此答案作爲'接受'併爲你的新問題提出一個新的問題,我不會對你的新問題抱歉,感謝閱讀和原諒我的英語。 – ElektroStudios

+0

好吧,我認爲我將其標記爲Accepted。我寫了一個新問題,希望你能看到正在發生的事情。如果你想要,你可以自己嘗試。 –

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) 
相關問題