Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop DOS-尝试理解分隔符以查找最低行数的inf文件_For Loop_Batch File_Dos - Fatal编程技术网

For loop DOS-尝试理解分隔符以查找最低行数的inf文件

For loop DOS-尝试理解分隔符以查找最低行数的inf文件,for-loop,batch-file,dos,For Loop,Batch File,Dos,我在我正在编写的bat文件中发现了一个bug,并意外地找到了一个修复程序,但我不明白为什么这个修复程序会起作用。。这最终是我的问题,或者这个逻辑是否还有其他我没有发现的问题 脚本在2个或更多文件中进行行计数,然后目标是找到行计数最低的文件,然后在脚本中的变量中使用该计数作为参数 示例文件1(9行): 示例文件2(10行): 我看到的主要区别是文件2中的第9行和第10行是两位数的行号 注意:我指的不是每行的实际值,而是行号的计数值,因为我的代码不尝试解析行,而只获取行数 在我创建的代码顶部附近,然

我在我正在编写的bat文件中发现了一个bug,并意外地找到了一个修复程序,但我不明白为什么这个修复程序会起作用。。这最终是我的问题,或者这个逻辑是否还有其他我没有发现的问题

脚本在2个或更多文件中进行行计数,然后目标是找到行计数最低的文件,然后在脚本中的变量中使用该计数作为参数

示例文件1(9行):

示例文件2(10行):

我看到的主要区别是文件2中的第9行和第10行是两位数的行号

注意:我指的不是每行的实际值,而是行号的计数值,因为我的代码不尝试解析行,而只获取行数

在我创建的代码顶部附近,然后将每个文件的计数值附加到名为~numbers.txt的临时文件中,以便在此处模拟该过程,假设我的起始代码为:

echo 9 > ~numbers.txt
echo 10 >> ~numbers.txt
type  ~numbers.txt
现在我有一个文件,有两行“9”和“10”,当然9比10小,但也比10小一位数

现在,我试图通过将第1行读入一个变量,然后循环并计算当前值是否小于先前值来查找~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%
setlocal enabledelayedexpansion

set/p lower=如果你没有看到某个东西,并不意味着它不存在。(我这里指的是空格) 请尝试以下方法:

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

注意:没有ifs,没有延迟扩展,如果你没有看到某个东西,并不意味着它不存在。(我这里指的是空格) 请尝试以下方法:

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

注意:无ifs,无延迟扩展

+1,捕获良好。比较运算符前后的额外空格通常并不重要。但是,如果它们在%%G或%%G中,它们确实很重要!最低的!正在比较的值。有趣的是,由于解析器的工作方式,如果使用%var%扩展,它们并不重要。但当然,延迟扩展必须使用,因为它是在一个循环中。所以如果我理解正确。。。“delims=”不是这种情况下的默认方法??让它不成为FOR循环的一部分是不计算空白的默认方法吗?在这种情况下,“delims=”在这行中为我做了什么,为什么我会这样使用它,或者以我最初写这行的方式使用它是完全错误的?我还在学习,从网上得到了这个例子,所以逐字使用这个例子可能不正确。谢谢……不,默认的delims是空格,而制表
“delims=“
表示没有delims,所以空格被保留为stringAh的一部分,好的,这很有意义。我没有意识到默认的分隔符。。非常感谢…+1,接得好。比较运算符前后的额外空格通常并不重要。但是,如果它们在%%G或%%G中,它们确实很重要!最低的!正在比较的值。有趣的是,由于解析器的工作方式,如果使用%var%扩展,它们并不重要。但当然,延迟扩展必须使用,因为它是在一个循环中。所以如果我理解正确。。。“delims=”不是这种情况下的默认方法??让它不成为FOR循环的一部分是不计算空白的默认方法吗?在这种情况下,“delims=”在这行中为我做了什么,为什么我会这样使用它,或者以我最初写这行的方式使用它是完全错误的?我还在学习,从网上得到了这个例子,所以逐字使用这个例子可能不正确。谢谢……不,默认的delims是空格,而制表
“delims=“
表示没有delims,所以空格被保留为stringAh的一部分,好的,这很有意义。我没有意识到默认的分隔符。。非常感谢你。。。
> ~numbers.txt echo 9<press ENTER immediately>
>> ~numbers.txt echo 10<press ENTER immediately>
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%