为什么在Windows 7命令窗口中进行字符串比较
if "-e" geq "d" echo yes
echo yes
?似乎忽略左侧字符串参数中的任何数量的前导连字符。
我的基本需求是一个答案,提供了一种可靠的方法来按字母顺序比较两个字符串的大小。
答案 0 :(得分:0)
讨论文件
(不是答案,但评论无法完成任务)
@ECHO OFF
SETLOCAL
FOR %%a IN (
"e d TRUE"
"d e FALSE"
"-e d FALSE"
"-d e FALSE"
"e -d TRUE"
"d -e TRUE"
"-e -d TRUE"
"-d -e FALSE"
"qe qd TRUE"
"qd qe FALSE"
"q-e qd FALSE"
"q-d qe FALSE"
"qe q-d TRUE"
"qd q-e TRUE"
"q-e q-d TRUE"
"q-d q-e FALSE"
"aaa-bbb aaabbb FALSE"
"7-2 72 FALSE"
"72 7-2 TRUE"
) DO CALL :strcmp %%~a&CALL :strcmp2 %%~a
GOTO :EOF
:strcmp2
SET "p1=%1"
SET "p2=%2"
CALL :strcmp %p1:-=% %p2:-=%
GOTO :eof
:strcmp
IF "%1" geq "%2" (ECHO %1 geq %2 TRUE expected %3) ELSE (ECHO %1 geq %2 FALSE expected %3)
GOTO :eof
以上演示显示OP的观察结果非常有效。
for
中的字符串提供给两个子程序;第一个与预期结果进行比较,第二个用相同的参数进行比较,但删除了所有-
,没有对预期结果发表评论。
( sic )对(已处理)的结果是一致的,表明-
似乎被忽略了 - 而且不仅仅是它首先出现有一个明显的异常
例外是最后一个例子。 “72”geq? “7-2”返回“false”,其中“true”是合乎逻辑的。如果比较严格按字母顺序排列,则2
大于-
因此为“真”。如果忽略-
,则72
和72
相同,因此为“true”。即使计算72 geq 5
,结果也是“真”。
那是什么交易? -
不仅仅是奇怪地分配了> z
整理价值,或者-e
将是> d
。
我想知道-
是否被忽略,但72
是一个比7-2
更短的字符串,这就是为什么这个比较返回“false”。
我相信需要更多的目光。怪癖的另一个条目是......