连续执行2个批处理脚本

时间:2015-11-06 06:23:50

标签: windows batch-file

我有2个批处理脚本:

sleep1.bat

echo sleep 4 seconds
timeout /t 4
exit

sleep2.bat

echo sleep 3 seconds
timeout /t 3
exit

是否可以连续执行sleep1.batsleep2.bat,以便程序可以睡7秒钟?

sleepMain.bat

call sleep1.bat
call sleep2.bat
pause

SleepMain.bat无法做我想做的事。它只执行slee1.bat,因为sleep1.bat包含exit

sleep1.batsleep2.bat由其他人撰写,我希望我不必更改它们。

3 个答案:

答案 0 :(得分:2)

是的,exit肯定会退出,但它退出控制台而不是当前的批处理脚本。
为防止发生这种情况,请使用exit /b

提示:

  
      
  1. 仅在脚本中使用exit
  2.   
  3. 如果你只是在 sleep1.bat 中做一些简单的事情,你可以选择不添加exit /b命令。
    自己动手: 1.bat - set "you=you" 2.bat - set "you=you" & exit /b
      在 3.bat 中,尝试call 1.bat & echo %you%call 2.bat & echo %you%,您仍会获得you作为输出。这意味着具有exit /b或无的脚本仍然可以访问先前调用的批处理脚本中的变量。 (安全地尝试使用简单的脚本)
  4.   

答案 1 :(得分:1)

  1. 作为在不退出当前cmd实例的情况下终止批处理脚本执行的一种改进方法,您不需要像您这样直接的脚本中放置任何内容(只需运行一个命令)在另一个之后,没有执行分支,没有if子句,没有循环结构)。要明确告诉脚本退出执行,您还可以使用goto :EOF:EOF是一个隐式标签,指向脚本的末尾(在命令提示符中键入goto /?以获取更多详细信息)。这仅在启用命令扩展时有效,默认情况下就是这种情况(请参阅cmd /?)。要在没有扩展名的情况下使用此方法,只需将标签:EOF定义为最后一行即可。

  2. 你的两个脚本不会持续4 + 3 = 7秒,但实际上是6到7秒。这是因为timeout命令以某些第二倍数返回,因此第一个可能更短(0秒>实际延迟时间> = 1秒)。您的脚本中的键盘交互甚至可以中断等待时间;为防止这种情况,请添加/NOBREAK选项(请参阅timeout /?获取帮助)。例如,要真正等待4秒,请说明> nul ping 127.0.0.1 -n 5;给定的IP地址意味着“家”,所以主机本身,因此它总是有效的; 5定义ping次尝试的次数,因此其间有4个1秒的间隔; > nul将显示输出重定向到nul设备,这意味着不会显示任何内容。

答案 2 :(得分:0)

这适用于Windows 10:

cmd /c sleep1.bat
cmd /c sleep2.bat
pause

它的工作原理是在单独的命令实例中启动批处理脚本。输出如下:

D:\workspace\deleteme>sleepMain.bat

D:\workspace\deleteme>cmd /c sleep1.bat

D:\workspace\deleteme>echo sleep 4 seconds
sleep 4 seconds

D:\workspace\deleteme>timeout /t 4

Waiting for 0 seconds, press a key to continue ...

D:\workspace\deleteme>exit

D:\workspace\deleteme>cmd /c sleep2.bat

D:\workspace\deleteme>echo sleep 3 seconds
sleep 3 seconds

D:\workspace\deleteme>timeout /t 3

Waiting for 0 seconds, press a key to continue ...

D:\workspace\deleteme>exit

D:\workspace\deleteme>pause
Press any key to continue . . .

D:\workspace\deleteme>