簡體   English   中英

如何將命令結果批量存儲到變量中?

[英]How to store the result of a command to a variable in batch?

我正在嘗試制作一個.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”'到變量?

在此先感謝Esteban。

如前一個答案所示,您使用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

/ f %% i在('type texto.txt | find / i / c“ D01”')中執行SET cantLineasDetalle = %% i

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM