2011-08-04 119 views
3

當我執行下面的代碼時,它可以工作,但我需要等待代碼完成;然後才能執行我的程序的其餘部分。我該怎麼做呢?需要vbscript「oShell.run」命令的幫助

作品,但不會等待:

Set oShell = CreateObject("Wscript.Shell") 
oShell.Run "sftp2.exe -B " & strOutputFile 

不起作用:

Set oShell = CreateObject("Wscript.Shell") 
Return = oShell.Run ("sftp2.exe -B " & strOutputFile, 1, true) 

作品,但不會等待:

Set oShell = CreateObject("Wscript.Shell") 
Set oExec = oShell.Exec ("sftp2.exe -B " & strOutputFile)  
+0

當你說它不起作用時,你是否收到任何類型的錯誤信息?它聽起來好像sftp2.exe沒有執行(或返回一個直接的錯誤),或者它退出時不發出返回碼。您可以嘗試使用WMI進行此操作,而不是在實際觀察其進程時進行。 – Nilpo

回答

1

在你的第三個例子,您可以輪詢WshScriptExec對象的狀態,直到過程完成:

Set oShell = CreateObject("Wscript.Shell") 
Set oExec = oShell.Exec ("sftp2.exe -B " & strOutputFile) 

Do While oExec.Status = 0 
    WScript.Sleep 100 
Loop 

' as you were... 

雖然你的例子看起來很像他們從msdn拍攝,所以我不知道他們爲什麼不工作。也許這是你的程序sftp2.exe運行的方式導致了這個問題?如果它與通常的ftp應用程序類似,它將作爲一種可能不兼容的命令提示符運行。我只是在猜測。

+0

感謝您的回覆。我正在考慮睡眠循環,但似乎在「Set oExec = oShell.Exec(」sftp2.exe -B「&strOutputFile)」之後執行的任何命令似乎都會導致sftp無法正確完成。我還注意到「oShell.Run(」sftp2.exe -B「&strOutputFile,1,true)」失敗,因爲我沒有在文件的正確目錄中。還有其他建議嗎? – Tony

+1

您是否嘗試過使用完整文件路徑? – Nilpo

1

再次感謝您的幫助。我想出了爲什麼它不能正常工作。絕對路徑與相對路徑。我使用的是相對路徑,這導致下面的代碼失敗,因爲不知道是否要找到sftp文件。在上面的其他兩個例子中,我的絕對路徑並不是必需的。

這適用於絕對路徑(即將"C:\somefolder\file";命令放入我的"strOutputFile"文件中)。

Set oShell = CreateObject("Wscript.Shell") 

Return = oShell.Run ("sftp2.exe -B " & strOutputFile, 1, true)