2016-11-05 9 views
1

私は.XLSXした.csvを変換するには、ここからのソリューションを使用しています:どのように私は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

多分['start" "/ wait wscript yourscript.vbs'] 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 

終了コードを返すために、あなたのVBSスクリプトでwscript.quitを使用してください。エラー番号はErr.numberプロパティに格納されます。

On Error Resume Next 
WScript.Sleep 2000 
Err.Raise 507 ' An exception occurred 
wscript.quit Err.number 
関連する問題