2017-04-24 43 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