2017-04-24 98 views
0

使用Windows任務計劃程序我正在運行多個命令,我將它們稱爲task1.bat,task2.bat和task3.bat。這些腳本中的每一個都運行不同的Psexec命令(psexec版本2.11)。在續集中運行多個命令時,Psexec失敗

當單獨運行task1.bat,task2.bat和task3.bat時,這些腳本成功運行;但是當連續運行時,task1.bat將成功運行,然後task2.bat和task3.bat通常會失敗,並顯示錯誤「Couldnt access servername。Access is denied。The command of syntax is incorrect」。

這似乎是一個Psexec錯誤,因爲當單獨運行的命令工作正常。有沒有辦法強制Psexec退出/結束之前移動到下一個腳本(除了只是超時)?看起來像psexec掛起導致下一個失敗。

+1

你可以複製和粘貼您正在使用的精確命令行和它們所產生的輸出?打開三個'cmd'外殼,讓命令可以同時運行。這是什麼產生的? – lit

+0

什麼*確切*你的意思是「連續運行」?如果您將它們作爲單獨的任務運行,並且所有任務都可以同時開始,那麼可能會導致問題,因爲它們會彼此重疊。 –

+0

讓我們就術語達成一致。 「連續」和「順序」意味着一個在另一個完成並且沒有同時運行之後運行。 「同時」意味着多個進程同時運行。當psexec同時運行時會發生問題嗎? – lit

回答

-1

您應該稍等片刻就啓動可執行文件。

start /wait psexec.exe 

或只是

start /w psexec.exe 

所以我個人建議你擺脫3個批處理文件,創建一個單一的文件,並讓每一個可執行的運行與等待,當它完成,做下一個等

是這樣的:

start /w psexec do something 
echo First process completed 
start /w psexec do next thing 
echo Second process completed 
start /w psexec do last thing 
echo /w This process completed 

這將運行PSEXEC每一箇中色曲只有當前一個完成時纔會開始下一個。

如果您不希望它們在彼此之後直接執行,您也可以添加超時。

start /w psexec do something 
echo First process completed 
timeout 300 
start /w psexec do next thing 
echo Second process completed 
timeout 400 
start /w psexec do last thing 
timeout 100 
echo /w This process completed 
+0

您通常不需要在批處理腳本中啓動/等待,因爲批處理器將等待命令完成。 (如果你需要某些特定於'start'的功能,比如能夠找到某些已安裝的應用程序,即使它們不在路徑上,那麼你可能需要指定'start/wait'而不僅僅是'start' 。但在這種情況下,你可能不需要。) –

+1

@HarryJohnston它實際上並沒有,它等待程序執行,如果執行沒有錯誤,它將返回到cmd行。通過添加等待,您告訴它等待程序完成。你可以嘗試一下。運行cmd.exe並從中運行'notepad.exe',你會看到它開始記事本,然後返回到cmdline。但現在使用'start/w notepad.exe'來執行此操作,您將看到cmd行等待記事本退出之前退出。 –

+0

這就是它在交互式輸入命令*時的行爲,但是在批處理腳本中,它的行爲與我描述的相同。嘗試一下! –

0

如果創建並運行批處理文件將.bat腳本將順序運行:

CALL task1.bat 
CALL task2.bat 
CALL task3.bat 
相關問題