【问题标题】:Using FindStr + length in batch批量使用 FindStr + length
【发布时间】:2013-01-16 17:16:09
【问题描述】:

在我的文本文件中是这一行。

08.01.2013 20:06:36: SolsticeFTW (109.189.238.113:60381) 04ee8dfa81f700bba194a528911ecb4a - #0
08.01.2013 20:11:00: SolsticeFTW (109.189.238.113:60381) 04ee8dfa81f700bba194a528911ecb4a - #0
08.01.2013 20:11:24: SolsticeFTW (109.189.238.113:60381) 04ee8dfa81f700bba194a528911ecb4a - #0
08.01.2013 20:11:50: SolsticeFTW (109.189.238.113:60381) 04ee8dfa81f700bba194a528911ecb4a - #0
09.01.2013 15:39:57: lalka (95.165.55.92:15609) 161c5a17c5afc0b1e079fca7fdc8f1a9 - #0

我想根据命令 Findstr 过滤一个文本文件,这有效,但我无法让它只过滤 32 位数字的单词。例如 04ee8dfa81f700bba194a528911ecb4a 和 161c5a17c5afc0b1e079fca7fdc8f1a9。到目前为止,它只能通过过滤整行来起作用。

有谁知道我如何只过滤 32 位符号/令牌?

【问题讨论】:

    标签: batch-file findstr


    【解决方案1】:

    FINDSTR 只能打印匹配的整行。它不具备 grep 之类的功能,只能列出文本的匹配部分。

    FOR /F 命令通常可用于从一行文本中提取标记,具体取决于数据的格式。您可以使用 FINDSTR 仅选择适当的行,并使用 FOR /F 处理这些结果并提取 32 位标记。

    我不知道您的 FINDSTR 搜索条件是什么,所以我将编造一些内容作为示例。假设您要打印以 #0 结尾的行的 32 位标记。

    FINDSTR 选择适当的行,查找以#0 结尾的行。并且 FOR /F 将每个结果行解析为由空格分隔的标记。 (可以通过 DELIMS 选项更改标记分隔符,但默认为空格和制表符)。你想要第 5 个令牌。

    for /f "tokens=5" %%A in ('findstr /le " #0" "someFile.txt"') do echo %%A
    


    根据 OP 评论进行编辑

    如果您不需要过滤行,而只是想将每个 32 位 ID 写入一个新文件,那么它就更简单了:

    (for /f "tokens=5" %%A in (logged-players.log) do echo %%A) >logged-bans.txt
    

    【讨论】:

    • 上面的文本框叫做“logged-players.log”。我只想将 32 位数字令牌/ID 写入一个名为“logged-bans.txt”的文本文件中。只是 ID 而不是 #0 或任何 32 位数字的令牌/ID。使用 [0-9a-z] 可能有效,但我不知道使用哪个命令。
    • 然后我得到“C:\Test>echo 161c5a17c5afc0b1e079fca7fdc8f1a9 161c5a17c5afc0b1e079fca7fdc8f1a9”,但我只想要“161c5a17c5afc0b1e079fca7fdc8f1a9”路径而不是 echo。
    • @user1984532 - 转ECHO OFF,或者在命令前面加上@,如do @echo %%A
    猜你喜欢
    • 1970-01-01
    • 2014-07-01
    • 2023-04-02
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多