2015-11-06 77 views
1

我有2個批處理腳本:執行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是別人寫的,我希望我不必改變它們。

回答

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> 
+0

謝謝。這正是我想要的:) – Brian

2

是的,exit肯定會退出,但它會退出控制檯而不是當前的批處理腳本。
爲防止發生這種情況,請使用exit /b

提示:

  1. 使用exit只在主要腳本。
  2. 如果您只是在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腳本,要麼仍然無法訪問先前調用的批處理腳本中的變量。 (安全地嘗試用簡單的腳本)
1
  1. 作爲altervative方式終止批處理腳本的執行,而無需退出當前cmd情況下,你不需要把任何東西在你們這樣一個直接的腳本(一個命令在另一個命令之後運行,沒有執行分支,沒有如果子句,沒有循環結構)。要明確告訴腳本退出執行,您還可以使用goto :EOF:EOF是隱式標籤,指向腳本的末尾(有關更多詳細信息,請在命令提示符中鍵入goto /?)。這僅在啓用命令擴展時纔有效,默認情況下是這種情況(請參閱cmd /?)。要使用這種不帶擴展名的方法,只需將其標記爲最後一行即可定義標籤:EOF

  2. 你的兩個腳本不會持續4 + 3 = 7秒,但實際上是6到7秒。這是因爲timeout命令以某些第二倍數返回,所以第一個可能會更短(0 s>實際延遲時間> = 1 s)。等待時間甚至可以通過腳本中的鍵盤交互來中斷;爲防止出現這種情況,請添加/NOBREAK選項(請參閱timeout /?以獲取幫助)。要真正等待4秒鐘,例如,狀態> nul ping 127.0.0.1 -n 5;給定的IP地址意味着「家」,所以主機本身,因此它總是有效的; 5定義了嘗試次數ping,所以在4之間有一秒間隔; > nul將顯示輸出重定向到nul設備,即不顯示任何內容。