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

时间:2012-01-05 18:29:34

标签: windows batch-file

我正在尝试制作.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”没有存储我想要它做的值。

如何设置'type texto.txt |的执行结果找到/ i / c“D01”'变量?

提前致谢, 埃斯特。

2 个答案:

答案 0 :(得分:1)

如前面的答案所示,您使用FOR / F循环将命令的结果存储到变量中。

如果文件很大,

find "search" <file可能比type file | find "search"明显更有效。

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

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

答案 1 :(得分:0)

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