2013-01-23 46 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