为什么这个计算文本文件中行数的批处理命令有效?

Som*_*Guy 2 batch-file

for /f %%a in ('type "file.txt"^|find "" /v /c') do set /a count=%%a
Run Code Online (Sandbox Code Playgroud)

我在http://www.dostips.com/?t=Snippets.CountLines找到了这个命令

它似乎工作,但我无法弄清楚为什么.我不愿意使用我不理解的东西,除非它有特殊字符的错误等但我无法弄清楚它为何起作用.

MC *_* ND 6

反了

  • type file.txt 只需读取文件并将其内容输出到标准输出.

  • 在此代码中,type命令的输出通过管道传输到find命令中.

  • find命令读取标准输入(没有指示要读取的文件)并过滤它,搜索不包含(/v)的行(find如果指示空字符串则不匹配任何内容).在过滤时,它将计算找到多少行,并将仅输出匹配行数(/c)的标准流.由于空字符串不匹配任何东西,但/v开关否定它,我们结束匹配(并计数)文件中的所有行.

  • 使用命令执行前两个管道命令for /f.for /f用于处理字符串,读取文件的内容,或执行命令并处理其输出.

注意:默认情况下,要执行infor /f命令用命令子句中的单引号括起来

注意:管道是一个特殊字符,并将其包含在for /f我们需要转义它的命令中(^|)

  • 对于每一行(字符串,文件内的每一行或命令输出中的每一行),do执行子句中的代码,处理的行(或其某些部分)存储在for可替换参数中(%%a在此码)

  • find命令的输出(文件中的行数)存储在for /f可替换参数中,do执行该子句并将文件中的行数(存储在可替换参数中)复制到环境变量中

注意:set /a用于算术运算.在这种情况下没有必要并且一个简单的set命令应该完成工作,但也许这样写是为了更清楚地表明将存储在环境变量中的值是一个数字

  • @GolezTrol,环境变量总是字符串,`/ a`只是调用一个单独的解析器来处理算术,这个代码中没有.我还没有看到`find/c`命令输出任何数字,你知道怎么做吗? (2认同)