【问题标题】:Batch - search a TXT file (show everything after a certain line?)批处理 - 搜索 TXT 文件(显示某行之后的所有内容?)
【发布时间】:2017-06-16 15:59:06
【问题描述】:

我正在尝试使用 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”值,而且它也不起作用,因为其他行不包含该短语,所以我对如何解决这个问题感到困惑.

感谢您的宝贵时间!

【问题讨论】:

  • for /F "delims=:" %%a in ('findstr /N /C:"phrase xyz" C:\temp.txt') do more +%%a C:\temp.txt
  • 效果很好,谢谢,你能解释一下“做更多+%%a”部分吗?我理解 findstr /n 部分,但不是这个。
  • 如果您阅读more /? help screen,您会发现+n 选项“开始在第n 行显示第一个文件”而不是在第一行...跨度>
  • 啊,很好,谢谢!

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


【解决方案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 设置为empty,然后对于输入文件的每一行(delims= 关闭分隔符以便将整行传送到%%a),如果output已定义,显示读取的行。然后检查它是否完全正确 phrase xyz,如果是,则将output设置为Y

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

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

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

还有其他选择,具体取决于您的实际目的。

【讨论】:

  • 完美答案,代码清晰,解释清楚,我现在学到了一个很好的方法来实现这一点,将来会多次使用。非常感谢您所做的一切,非常感谢。在真实情况下实施,效果很好!
猜你喜欢
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
  • 2010-10-30
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
相关资源
最近更新 更多