我正在尝试制作.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”'变量?
提前致谢, 埃斯特。
答案 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