2012-07-10 67 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