2016-11-05 1 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 и все работает, но при запуске из ЦМД, то команда сразу заканчивается, хотя скрипт vb все еще обрабатывается. Есть ли способ сообщить cmd, что vb закончил? Я пытаюсь создать пакетный файл, поэтому было бы здорово узнать, когда эта часть будет закончена, прежде чем перейти к следующему шагу. Благодаря!

+0

Возможно, это не совсем дубликат, но следующее кажется соответствующим: http://stackoverflow.com/q/187040/4996248 –

+1

Возможно, что-то вроде ['start" "/ wait 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 в cscript.exe, запустив wscript.exe //h:cscript или cscript.exe //h:cscript в качестве администратора.

+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 скрипт для возврата код выхода. Номера ошибок хранятся в объекте Err.number.

On Error Resume Next 
WScript.Sleep 2000 
Err.Raise 507 ' An exception occurred 
wscript.quit Err.number 
Смежные вопросы