开始一个脚本,继续开始另一个

时间:2014-07-08 19:26:32

标签: batch-file

我尝试远程部署某些软件,并且我有一些批处理脚本来帮助完成此过程。我的流程的基础是拥有scriptA经过的文本列表,scriptA将必要的文件复制到目标PC(从列表中检索)并启动ScriptB。然后理论是,一旦ScriptB启动它就会转移到列表中的下一台PC,并且在继续前进之前不会等待ScriptB完成。我所拥有的基础知识如下:

ScriptA

Set /P List= Please enter the list name
Set /P Name= Please enter your username
FOR /F %%A IN (%LIST%) DO (
MKDIR \\%%A\C$\Temp\Install
XCOPY "\\share\necessary files" "\\%%A\C$\Temp\Install"
PSEXEC \\%%A -u DOMAIN\%NAME% -e "\\%%A\C$\Temp\Install\scriptB.bat"
)

ScriptB只需运行安装程序并自行清理。

就像我说的那样,目标是一旦scriptA完成文件的复制并开始启动,它就会转移到列表中的下一台PC上。我已经确认现在一切正常(所以请忽略任何在上面的伪代码中不起作用的随机事物)它只需要永远,因为它等待安装完成后再继续。

编辑:

我意识到我将错误的文件显示为被复制。最初被列为' install.bat'应该是scriptB。我很抱歉,因为我很难描述这个问题,所以很难设法解决我的问题。

Per Request,以下是我使用start的方式:

SCRIPTA:

START PSECEC \\%%A -u DOMAIN\%NAME% -e "\\%%A\C$\Temp\Install\ScriptB.bat"

它可以在一个新窗口中启动ScriptB,但我真正想要的最终产品是:

  • scriptA会提示输入PC名称列表
  • scriptA从列表中提取第一个名称,并从网络共享中复制安装文件,包括scriptB并将它们放入\ temp \ install
  • scriptA在刚刚将文件复制到的PC上启动scriptB。
  • 当scriptB正在运行时,scriptA继续运行并将文件复制到列表中的下一台PC并踢下scriptB的下一个副本
  • 重复,直到整个PC列表完成。

我希望这有助于澄清事情,我再次为这种困惑道歉。我已经按照上面列出的所有步骤工作,我希望,唯一不起作用的是我无法启动scriptA来启动scriptB而不会暂停scriptA以等待scriptB完成以及我是什么我想要发生的事情就是它继续前进而不等待(这样我就可以在一天结束时启动这个脚本,它会在晚上继续安装,直到它完成PC列表)。

再次感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您可以使用START命令启动命令,而无需等待它继续运行。请注意,这将在新创建的命令提示符中执行指定的命令,而不是在同一命令提示符进程中执行。

请注意,如果可执行文件/批处理文件的路径包含空格,则必须将空字符串参数指定为第一个参数。例如:

START "" "C:\Path with spaces\My other script.bat"

这是因为如果第一个参数被引号括起来,则它被认为是为执行新进程而启动的新命令提示符的标题。指定一个空参数(或者您想要使用的标题)将解决这种情况。

答案 1 :(得分:0)

我们越远离实际问题,我们就越不能提供帮助。问题越普遍,反应越模糊。

我们毫无意义地从“ScriptB”映射到“Install.bat”,并且您声称已经添加了启动命令,但没有向我们显示您使用它的位置。

使用原始脚本,更改

PSEXEC \\%%A -u DOMAIN\%NAME% -e "\\%%A\C$\Temp\Install.bat"

start "installing on %%A" PSEXEC \\%%A -u DOMAIN\%NAME% -e "\\%%A\C$\Temp\Install.bat"

应该解决问题 - 但不能保证。