2012-01-05 188 views
1

我嘗試製作一個.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」'變量?

在此先感謝, 埃斯特萬。

回答

1

正如前面的答覆中指出,您使用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 
+0

謝謝。就在你迴應之前的幾分鐘,我已經找到了與控制檯一起玩的答案。這就是我所做的:「for/f」tokens = 3「%% G in('find/i/c」D01「C:\ texto.txt')SET SET cantLineasDetalle = %% G」但是我會用你的推薦來修改我的代碼。我真的讚賞你的答案。再次感謝。 – t3b4n 2012-01-05 20:00:57

+1

@ t3b4n - FIND古怪:FIND搜索文件不同於FIND搜索文件。第一行生成2行:文件名,然後是count。第二隻產生計數。你可能想要第二種形式。 – dbenham 2012-01-05 20:16:40

0

FOR/F %%我在( '型texto.txt |找到/ I/C 「D01」')做SET cantLineasDetalle = %%我

+0

謝謝您的回答,但它不工作。它顯示錯誤:「|不是預期的」。我用你的代碼替換了第四行代碼以獲得結果。 – t3b4n 2012-01-05 18:52:25

+0

問題是'|'必須在IN()子句內部轉義 – dbenham 2012-01-05 20:17:31

+0

我的Windows-Fu已經變得相當生鏽 - 很長一段時間,因爲我拋光了它。 – 2012-01-05 20:18:19

相關問題