2013-01-23 45 views
1

我成功地設法在findstr的長文件列表中查找字符串。我將findstr的輸出重定向到不同的文本文件,但是我需要刪除包含源文件參考的輸出行的起始部分。該基地是低於從findstr命令輸出中替換字符串

echo testtest > testing.txt 
findstr 'test' *.txt > output.txt //output is 'testing.txt:testtest' 

我需要做這樣的事情,而不是例如

echo testtest > testing.txt 
findstr 'test' *.txt | *something* > output.txt //output is 'testtest' 

警告:
我只能使用標準的CMD命令,我不能安裝在新軟件目標機器

回答

3

東西像這樣應該工作:

@echo off 
for /f "delims=: tokens=1*" %%i in ('findstr "test" *.txt') do (
    echo %%j 
) >> output.txt 

要注意的是所有的輸入文件必須尾隨的換行符,否則當前文件的第一場比賽可能會附加到一個文件的最後一場比賽,如果那場比賽是在最後一行:

testtestFOO.TXT:something test other 
+0

+1,關於CR/LF問題的好處:-)我在[我的回答]中有一個解決方案(http://stackoverflow.com/a/ 14489995/1012053) – dbenham

+0

這可以根據我的需要,謝謝 – Gabber

+0

CRLF確實會有問題嗎?你用'echo'打印結果,它總是*追加CRLF,不是嗎? –

-1

在Linux系統中,你可以使用awk像下面的命令:

cat output.txt | awk 'match($0,":"){print substr($0,RSTART+1)}' 
+0

是的,但我在窗口 – Gabber

3

這是一個解決方案,可以解決Ansgar Wiechers在his answer中發現的CR/LF問題。

我使用FOR循環迭代所有文件並在每個單獨的文件上運行FINDSTR。我在每個文件之間回顯空行。最後,我再使用一個FINDSTR來刪除任何不需要的空白行。

@echo off 
>"output.txt" (
    for %%F in (*.txt) do (
    findstr "test" "%%F" 
    (echo() 
) 
) 
findstr . "output.txt" >"output.txt.new" 
move /y "output.txt.new" "output.txt" >nul 
type output.txt 
+0

這是有效的,但在我的情況下,我相信沒有比賽會在最後一線,我更喜歡單線程計劃。不過非常感謝(和+1) – Gabber