2016-11-05 5 views
1

ich von hier aus der Lösung bin mit zu konvertieren CSV .xlsx:Wie kann ich cmd wissen VB-Skript ist fertig?

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!" 

Ich habe versucht, diese von .cmd laufen und alles funktioniert, aber wenn Sie es von cmd ausführen, die Der Befehl wird gerade beendet, obwohl das vb-Skript noch verarbeitet wird. Gibt es eine Möglichkeit, cmd wissen zu lassen, dass vb fertig ist? Ich versuche eine Batch-Datei zu erstellen, daher wäre es toll zu wissen, wann dieser Teil fertig ist, bevor ich mit dem nächsten Schritt fortfahre. Vielen Dank!

+0

Vielleicht nicht ganz ein Duplikat, aber das folgende scheint relevant: http://StackOverflow.com/q/187040/4996248 –

+1

Vielleicht etwas wie ['start" "/ warten wscript yorscript.vbs'] (http: // ss64.com/nt/start.html) könnte ausreichen. – JosefZ

Antwort

2

Sie laufen wahrscheinlich das Skript selbst:

C:\path\to\your.vbs 

Dadurch läuft so das Skript mit dem zugehörigen Interpreter, der in einer normalen Installation wscript.exe ist. Grundsätzlich ist die oben gleich wie

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

wscript.exe startet Skripte asynchron, dh es kehrt sofort zurück, während das Skript im Hintergrund weiter läuft. Um Skripte synchron laufen zu lassen, müssen Sie stattdessen den Kommandozeilen-Interpreter cscript.exe verwenden. Fügen Sie den Parameter //NoLogo hinzu, um die Copyright-/Versionsinformationen zu unterdrücken.

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

Mit dieser Ausführung wird Ihr Batch-Skript erst fortgesetzt, nachdem das VBScript beendet wurde. Die Verwendung des Befehls call ist nicht erforderlich.

Sie können den Standardinterpreter von wscript.exe in cscript.exe ändern, indem Sie wscript.exe //h:cscript oder cscript.exe //h:cscript als Administrator ausführen.

+0

Worum geht es in der '//'? Befehlsschalter sind '/'. Von der 'cmd'-Eingabeaufforderung aus funktioniert' cscript.exe/nologo' einwandfrei. – Lankymart

+0

Schauen Sie sich die Ausgabe von 'cscript /?' An. Ich nehme an, die ursprüngliche Absicht war, zwischen Parametern für den Interpreter und Parametern für das Skript zu unterscheiden. Sowohl "NoLogo" als auch "NoLogo" scheinen heutzutage zu funktionieren, aber die Verwendung der doppelten Schrägstriche für Interpreter-Parameter wurde zur Gewohnheit. –

+0

Ok, nie als Host-Parameter bemerkt habe ich immer mit '/' gearbeitet. Immer lernen. – Lankymart

0

Unter Verwendung Anrufcscript das Batch-Skript wird warten, bis der Skriptprozess beendet wird. /T können Sie eine Zeitüberschreitung festlegen. Der Prozess wird unterbrochen, wenn die Laufzeit den in Sekunden angegebenen Grenzwert überschreitet.

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

Verwenden wscript.quit in Ihrem vbs Skript einen Exit-Code zurück. Fehlernummern sind in der Fehlernummer Eigenschaft gespeichert.

On Error Resume Next 
WScript.Sleep 2000 
Err.Raise 507 ' An exception occurred 
wscript.quit Err.number 
Verwandte Themen