如何将命令的结果批量存储到variables中?

我尝试制作一个.bat文件,根据符合条件的行数量,将空行添加到文本文件中。 这是什么:

@echo SET /a maxLineas = 50 SET cantLineasDetalle="type texto.txt | find /i /c "D01" " SET /a cantLineasAgregar = %maxLineas% - %cantLineasDetalle% :loop echo. >> texto.txt set /a cantLineasAgregar-=1 if %cantLineasAgregar% GTR 0 goto loop 

麻烦的是,var“cantLineasDetalle”没有存储我想要的值。

我如何分配'typestexto.txt |的执行结果 find/我/ C“D01”'variables?

在此先感谢,埃斯特class。

正如前面的答案所指出的那样,你可以使用FOR / F循环将命令的结果存储到一个变量中。

find "search" <file可以比type file | find "search"显着更有效率 如果文件很大, type file | find "search"

当在FOR / F IN()子句中执行时,所有的特殊字符必须被引用或转义。 在你的情况下,管道将需要逃脱,或者如果你采取我的建议,<将需要逃脱。

echo. >>file echo. >>file将在echo. >>file后面添加一个空格。 另外,使用echo(而不是echo.是安全的,但是你可能永远不会遇到echo的问题。要得到一个没有空格的空行,使用echo(>>file

使用SET / A进行数学运算时,可以直接引用变量,而不用百分比来表示。 它也适用于百分比。

最后,在FOR / L循环中追加行,而不是使用GOTO循环更有效率。

 @echo off set /a maxLineas=50 for /f %%N in('find /i /c:"D01" ^<texto.txt') do set /a cantLineasDetalle=%%N set /a cantLineasAgregar=maxLineas-cantLineasDetalle for /l %%N in (1 1 %cantLineasAgregar%) do echo(>>texto.txt 

整个脚本可以压缩到以下(maxLineas现在是0基于)

 @echo off set /a maxLineas=50-1 for /f %%N in('find /i /c:"D01" ^<texto.txt') do for /l %%I in (%%N 1 %maxLineas%) do echo(>>texto.txt 

('type texto.txt | find / i / c“D01”')SET SET cantLineasDetalle = %% i