我试图用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"价值并且它也不起作用,因为其他行不包含这个短语所以我对如何解决这个问题感到困惑。
感谢您的时间!
答案 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
。
根据您的真实目的,还有其他选择。