如何将命令的结果批量存储到变量中?
问题描述:
我尝试制作一个.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 |找到/我/ C“D01”'变量?
在此先感谢, 埃斯特万。
答
正如前面的答复中指出,您使用FOR/F循环将命令的结果存储到变量中。
find "search" <file
如果文件很大,可以比type file | find "search"
更有效。
当在FOR/F IN()子句中执行时,所有特殊字符都必须加引号或转义。在你的情况下,管道将需要逃脱,或者如果你采取我的建议,<将需要逃脱。
echo. >>file
将向该文件附加一行空格。此外,使用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
谢谢。就在你回应之前的几分钟,我已经找到了与控制台一起玩的答案。这就是我所做的:“for/f”tokens = 3“%% G in('find/i/c”D01“C:\ texto.txt')SET SET cantLineasDetalle = %% G”但是我会用你的推荐来修改我的代码。我真的赞赏你的答案。再次感谢。 – t3b4n 2012-01-05 20:00:57
@ t3b4n - FIND古怪:FIND搜索文件不同于FIND搜索文件。第一行生成2行:文件名,然后是count。第二只产生计数。你可能想要第二种形式。 – dbenham 2012-01-05 20:16:40