2014-04-20 24 views
2

這裏是我的腳本:當我對它進行管道操作時,IF命令會發生什麼?

@echo off 
    echo.|if defined 1 geq 1 echo 1 is geq than 1 
    echo.|if defined 2 gtr 100 echo 2 is gtr than 100 

    echo.|if 1 gtr gtr 100 echo 1 is gteater than 100 
    echo.|if 100 lss gtr 100 echo 100 is gteater and the same time less than 100 

輸出爲:

1 is geq than 1 
2 is gtr than 100 
1 is gteater than 100 
100 is gteater and the same time less than 100 

什麼用IF命令去?

回答

2

將批料解析器符連接IF後的第一令牌。

要獲得洞察力,您可以使用cmdcmdline變量。

從一個批處理文件

@echo off 
echo pipe | if defined 1 geq 1 echo %%cmdcmdline%% 

在輸出中,你可以看到,defined1被連接起來,所以這是一個奇怪的結果

原因

C:\ WINDOWS \ SYSTEM32 \ cmd.exe的/ S/d/C 「如果defined1 GEQ 1回波 %CMDCMDLINE%」

當從測試此您需要修改%%cmdcmdline%%%^cmdcmdline%的命令行,因爲cmd分析器與擴展百分比有點不同。

2

變化這樣的:

if defined 1 geq 1 echo 1 is geq than 1 

這樣:

if defined 1 if 1 geq 1 echo 1 is geq than 1 
+2

在大多數情況下,我知道如何處理命令:-)。這個問題有點誤導性,我比其他任何東西都要求它更有趣。主要原因是這裏'IF'的行爲如此。我認爲這是'IF'中的一個錯誤 - http:// www .dostips.com/forum/viewtopic.php?f = 3&t = 5539&p = 33837#p33837 - 但是如果可以證實這一點將會很好。 – npocmaka

+3

我知道你非常熱衷於語法的實驗,弄清楚它是如何工作的,以及新的方法來做事情。儘管如此,我認爲這有點偏離主題。 Dostips是一個更好的地方,但可以使用更多的眼睛和測試者。 – foxidrive

相關問題