批量搜索TXT文件(显示某一行后的所有内容?)

时间:2017-06-16 15:59:07

标签: loops batch-file for-loop search text-files

我试图用FOR循环隔离文本文件的一部分。

例:
C:\ temp.txt包含以下行:
1
2
3
短语abc
4
5
短语xyz
6
7
8
9
10个

我希望循环在"短语xyz"之后回显每一行,但我无法找到方法。 需要说明的是,本例中我需要的结果是:
6
7
8
9
10个

我试过这样的事情:

FOR /F "tokens=1,2 delims=phrase xyz" %%A IN (C:\temp.txt) DO ECHO %%B

但似乎不可能使用除一个单词以外的任何内容作为" DELIMS"价值并且它也不起作用,因为其他行不包含这个短语所以我对如何解决这个问题感到困惑。

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

错误的做法。 delims子句包含一个字符集,它将用作一行中的标记分隔符。

您的“显示特定字符​​串后面的所有行”问题可能会解决如下:

@echo off
setlocal
set "output="
(
for /f "delims=" %%a in (inputfilename) do (
 if defined output echo %%a
 if "%%a"=="phrase xyz" set "output=Y"
)
)>outputfilename

首先将output设置为为空然后为输入文件的每一行(delims=关闭分隔符,以便将整行传递到%%a ),如果定义了output,则显示读取的行。然后检查它是否完全 phrase xyz如果是,请将output设置为Y

因此,当找到目标字符串时,设置标志output(设置的值无关紧要 - 它只需要 - )和行此后出现的是输出。

通常,echo会将输出发送到屏幕,但如果整个for语句被一对括号包围,则输出可以轻松地重定向到文件。 - 这是(for之前的单独)>filename的目的。

如果您想进行不区分大小写的比较,请使用if /i代替if

根据您的真实目的,还有其他选择。