2012-07-10 95 views
2

發佈部分數字,其要尋找一個解決辦法比較代碼的批量

if 09 LSS 9 (ECHO YES) ELSE (ECHO NO) 

此命令總是呼應的,因爲它認爲09小於9.該命令的任何替代方案「是」?

編輯:

謝謝,但該模部分沒有在命令我試圖在插入工作

有一個包含一個文件test.txt「1234 09」下面是我的命令

set actualdate=9 
for /f "usebackq Tokens=1,2,3" %%d in (test.txt) do (SET /a x=1000%%e %% 1000 & if %x% LSS %ActualDate% ECHO %%d >> test2.txt) 
+0

前綴'0'表示八進制數,所以'09'是無效號碼。你會得到意想不到的結果。 – 2012-07-10 19:41:05

+0

@EitanT'09'是一個無效的數字,但結果並非意外。如果不是兩個值都是數字,則評估字符串比較。 – jeb 2012-07-10 20:20:30

+0

[08小於1的可能重複,但在DOS /批處理中,07大於1。爲什麼?](http://stackoverflow.com/questions/10628700/08-is-less-than-1-but-07-is-greater-than-1-in-dos-batch-why) – dbenham 2012-07-10 20:21:46

回答

3

與您的代碼段的問題是語法還有百分比的擴大。
您可以在一行中使用&作爲多個命令(不是管道|),也可以將它們拆分爲多行。
你不能擴展%的訪問變量x塊內,但推遲擴建工程有

setlocal EnableDelayedExpansion 
set actualdate=9 
for /f "usebackq Tokens=1,2,3" %%d in (test.txt) do (
    SET /a x=1000%%e %% 1000 
    if !x! LSS %ActualDate% ECHO %%d >> test2.txt 
) 
+0

謝謝傑布,這就是訣竅! – 2012-07-10 20:59:40

2

如果你可以把你的數字變成變量,你可以使用模去除前導零。

試試這個示例:

@ECHO OFF 

SET a=09 
SET b=9 

SET /a x=1000%a% %% 1000 
ECHO %x% 
SET /a y=1000%b% %% 1000 
ECHO %y% 

if %x% LSS %y% (ECHO YES) ELSE (ECHO NO) 

PAUSE 

如果你嘗試做SET/AA = 09,你會得到以下錯誤:

Invalid number. Numeric constants are either decimal (17), hexadecimal (0x11) or octal (021).

+0

'09'八字節怎麼樣? 「9」甚至不在八進制數字系統中。 – 2012-07-10 19:35:50

+0

@EitanT - 請點擊此處:http://www.dostips.com/forum/viewtopic.php?t=792。刪除了該評論以避免混淆。 – LittleBobbyTables 2012-07-10 19:38:02

+0

我沒有說前綴0不表示八進制數。只是'09'不是八進制的。現在,除了答案之外,我的看法是正確的解釋,所以值得+1。 **編輯**:你最好把最後的評論作爲_first_,因爲這是主要問題。 – 2012-07-10 19:39:54