2

我成功地设法在一长串带有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 命令,我不能在目标机器上安装新软件

4

4 回答 4

4

像这样的东西应该工作:

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

请注意,所有输入文件必须有一个尾随换行符,否则当前文件的第一个匹配项可能会附加到前一个文件的最后一个匹配项(如果该匹配项位于最后一行):

testtestFOO.TXT:something test other
于 2013-01-23T20:07:22.383 回答
4

这是解决 Ansgar Wiechers 在其回答中确定的 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
于 2013-01-23T21:45:57.737 回答
0

您应该使用 PowerShell ( powershell.exe) 来开发您需要的脚本。命令行可用的文档非常详尽:

PS > help about

如果您需要更多:是否有 PowerShell 的语言参考手册?

于 2013-01-23T12:07:51.850 回答
-1

在 Linux 系统上,您可以将awklike 用于以下命令:

cat output.txt | awk 'match($0,":"){print substr($0,RSTART+1)}'
于 2013-01-23T13:11:56.237 回答