2013-05-21 57 views
3

我寫了一個運行一系列命令的MS DOS批處理文件。批處理文件中的條件語句

每個命令調用一些具有特定參數的程序。爲了實現這一點,我組合了所有的命令。

批處理文件的結構,如下所示:

@echo off 
if %1 == "b1" (
command 1 
command 2 
command 3 
.... 
) else (
command a 
command b 
command c 
) 

我調用它,如下所示:

test.bat b1 

如果我通過b1作爲參數傳遞給批處理文件,它將處理一系列命令,命令1,命令2,命令3等等。

同樣,如果我想執行這一系列的其他部分中提到的命令,我傳給另一種說法:

test.bat abc 

由於傳遞到批處理文件中的說法是不等於B1,它會啓動執行批處理文件的else部分。在這裏,我傳遞的參數(在本例中爲abc)是命令,命令a,命令b,命令c等作爲參數所需的。

這一切都很好。

但是,我面臨的問題是,如果我想要終止其間的批處理文件(通過按Ctrl + C),它不會提示我使用以下選項:是否要終止批操作? Y/N

例如,讓我們說,批處理文件正在處理else節中的一系列命令。目前,假設它正在執行命令a。如果我按Ctrl + C,則不會提示我取消操作,而是取消執行命令a並自動執行命令b。如果我再次按下Ctrl + C,它會取消命令b並繼續執行命令c等等。現在

,在另一方面,如果我寫批處理文件,如下所示:

@echo off 
command a 
command b 
command c 

和我調用它從命令行:

test.bat abc 

現在,當我按下Ctrl + C在批處理文件正在執行時,它會提示我按預期取消批處理操作。

看來,當我在批處理文件中添加條件語句時,按某種方式修改了Ctrl + C的功能。

我該如何解決這個問題?

謝謝。

+0

單擊關閉窗口圖標而不是按下控件C.或者從'CMD /?'中讀取幫助以查看是否可以更改Control C/Break處理。有可能使用'start'「/ b/w command1'工作。 – foxidrive

回答

2

我嘗試這樣做,它似乎按預期工作:

@echo off 
if "x%1x" == "xb1x" (
    echo yes it is 
    dir 
    ... 
) else (
    echo no it is not 
    dir 
    ... 
) 

(其中...重複前面的一對線的100倍,給你時間按下Ctrl鍵 - Ç)。我確實得到提示,即使中斷髮生在if ...else

所以我懷疑你正在運行的命令有一些不尋常的事情,而if行爲是一個紅鯡魚。特別是,正如你所說他們正在啓動程序,我期望Ctrl - C直接傳遞到正在運行的程序,而不是啓動它的批處理文件。

+0

謝謝。是的,看起來Ctrl + C傳遞給我在批處理文件中調用的程序,而不是提示我終止批處理操作。所以,這是特定於我正在運行的程序。 –