bat文件字符串比较工作意外

时间:2017-10-16 01:30:52

标签: batch-file

为什么在Windows 7命令窗口中进行字符串比较

  if "-e" geq "d" echo yes

echo yes?似乎忽略左侧字符串参数中的任何数量的前导连字符。

我的基本需求是一个答案,提供了一种可靠的方法来按字母顺序比较两个字符串的大小。

1 个答案:

答案 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大于-因此为“真”。如果忽略-,则7272相同,因此为“true”。即使计算72 geq 5,结果也是“真”。

那是什么交易? -不仅仅是奇怪地分配了> z整理价值,或者-e将是> d

我想知道-是否被忽略,但72是一个比7-2更短的字符串,这就是为什么这个比较返回“false”。

我相信需要更多的目光。怪癖的另一个条目是......