2016-11-05 113 views
1

我使用从这里的解决方案转换.csv格式的.xlsx:如何让cmd知道VB脚本已经完成?

Convert .CSV to .XLSX using command line

Dim file, WB 

With CreateObject("Excel.Application") 
On Error Resume Next 
For Each file In WScript.Arguments 
    Set WB = .Workbooks.Open(file) 
    WB.SaveAs Replace(WB.FullName, ".csv", ".xlsx"), 51 
    WB.Close False 
Next  
.Quit 
End With 

WScript.Echo "Done!" 

我试图从.CMD运行这一点,一切正常,但是当你从CMD运行它时,命令只是马上完成,尽管VB脚本仍然处理。有没有办法让cmd知道vb已经完成?我正在尝试创建一个批处理文件,所以在继续下一步之前知道此部分何时完成将会非常好。谢谢!

+0

也许不是一个重复,但以下看起来相关:http://stackoverflow.com/q/187040/4996248 –

+1

也许像['开始“”/等待wscript yourscript.vbs“](http:// ss64.com/nt/start.html)就足够了。 – JosefZ

回答

2

你可能本身运行脚本:

C:\path\to\your.vbs 

如果这样做,与相关的解释器,在正常安装wscript.exe脚本。基本上,上面是一样的

wscript.exe C:\path\to\your.vbs 

wscript.exe异步启动脚本,这意味着立即在脚本继续在后台运行,它返回。为了同步运行脚本,您需要使用命令行解释器cscript.exe。添加参数//NoLogo以禁止版权/版本信息消息。

cscript.exe //NoLogo C:\path\to\your.vbs 

由于批处理脚本的执行只会在VBScript终止后继续执行。使用call命令不是必需的。

您可以通过以管理员身份运行wscript.exe //h:cscriptcscript.exe //h:cscript,将缺省解释器从wscript.exe更改为cscript.exe

+0

什么是// //所有关于?命令开关是'/'。从'cmd'提示符'cscript.exe/nologo'工作正常。 – Lankymart

+0

看看'cscript /?'的输出。我想最初的目的是区分解释器的参数和脚本的参数。现在'// NoLogo'和'/ NoLogo'似乎都有效,但是使用双斜线作为解释参数成为我的习惯。 –

+0

好吧,从来没有注意到,因为主机参数一直用'/'来工作。永远学习。 – Lankymart

0

通过使用请致电cscript批处理脚本将一直等到脚本引擎进程终止。 /T允许您设置超时。如果运行时间超过以秒为单位指定的限制,则进程会中断。

@echo off 
call cscript //T:10 "%~dp0example.vbs" 
ECHO %ERRORLEVEL% 
pause 

使用wscript.quit在你的VBS脚本返回的退出代码。错误编号存储在错误编号属性中。

On Error Resume Next 
WScript.Sleep 2000 
Err.Raise 507 ' An exception occurred 
wscript.quit Err.number 
相关问题