繁体   English   中英

DOS-试图了解定界符以查找行数最少的inf文件

[英]DOS - Trying to understand delimiters to find lowest line count inf files

我在正在编写的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?

这很不好,因为这意味着我的逻辑有缺陷,其他数字组合也会产生不同的结果。

谁能向我解释为什么会这样,并且/或者给出一个示例,说明如何获得正确的最低数字,而与值无关?

谢谢...

如果您没有看到任何东西,并不表示它不存在。 (我在这里说的是空格)请尝试以下方法:

> ~numbers.txt echo 9<press ENTER immediately>
>> ~numbers.txt echo 10<press ENTER immediately>

这将是真正的所见即所得,行末没有空格, if字符串不是全数字,则不会进行文本比较。 当然,您已经注意到,使用默认delims(其中一个是空格)剥离空格也可以正常工作。

考虑这种确定最低行数的方法:

set /a minlines=0x7FFFFFFF
for /f "tokens=2 delims=:" %%a in ('find /c /v "" *.txt') do set /a minlines="%%a-(minlines-%%a)*(minlines-%%a>>255)"
echo %minlines%

注意:没有,没有延迟扩展

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM