我在我正在编写的 bat 文件中发现了一个错误,并且偶然找到了一个修复程序,但是我不明白为什么修复程序有效。这最终是我的问题,或者如果这个逻辑还有其他我没有发现的问题。
该脚本在 2 个或更多文件中计算行数,然后目标是找到行数最少的文件,然后在脚本稍后的变量中使用该计数作为参数。
示例文件 1(9 行):
Wrote,0
Wrote,1
Wrote,2
Wrote,3
Wrote,4
Wrote,5
Wrote,6
Wrote,7
Wrote,8
示例文件 2(10 行):
Wrote,0
Wrote,1
Wrote,2
Wrote,3
Wrote,4
Wrote,5
Wrote,6
Wrote,7
Wrote,8
Wrote,9
我看到的主要区别是文件 2 中的第 9 行和第 10 行是两位数的行号
注意:我不是指每行的实际值,而是指行号的计数值,因为我的代码不会尝试解析行,而只是获取行数。
在我创建的代码顶部附近,然后将每个文件的计数值附加到一个名为 ~numbers.txt 的临时文件中,以便在这里模拟该过程,假设我的起始代码是:
echo 9 > ~numbers.txt
echo 10 >> ~numbers.txt
type ~numbers.txt
所以现在我有一个包含两行“9”和“10”的文件,当然 9 低于 10,但它也比 10 少一位。
现在我尝试通过将第一行读入变量然后循环并评估当前值是否小于先前值来找到文件 ~numbers.txt 中包含的最小数字。
setlocal enabledelayedexpansion
set /p lowest=<~numbers.txt
FOR /F "delims=" %%G in (~numbers.txt) DO IF %%G LSS !lowest! SET lowest=%%G
echo lowest num = %lowest%
当我运行这段代码时,我得到了这个错误的输出:
最低数量 = 10
我发现如果我从 FOR 循环中删除“delims=”,我将得到正确的结果 9。
还有,是什么真正搞砸了我对这个问题的理解;如果我只将 ~numbers.txt 中的值更改为 10 和 100 并单独保留 FOR 循环行(保持"delims="),那么我得到正确的值 10 作为我的答案???
这很糟糕,因为这意味着我的逻辑有缺陷,并且其他数字组合也会产生不同的结果。
谁能向我解释为什么会这样和/或举例说明如何获得正确的最低数字而不管值如何?
谢谢...