Repl.bat用于查找和替换文件列表中的文本

时间:2014-03-02 09:01:09

标签: batch-file

这是Batch file to list txt and mp3 files - using the list extract the same lines from the text files的后续内容 基本上我创建了一个文本文件列表,然后使用此列表在名为“JobNotes =”的文本文件中找到一行,并将其输出到新文件中,并以不同方式显示作业注释中的信息。 我修改了代码以在文件列表中使用findstr(文件名在文件text_list中)。它会创建第一个输出文件,但不会错误地显示其他输出文件。

这是代码

for /f "delims=" %%f in (%text_list%) do (
 FINDSTR /l "^Job Notes=" "%%f" |repl.bat ".*=(.*) (\d+) (\d+\/\d+\/\d+) \d+:\d+:\d+ .*" "Name=$1\r\nFile Number=$2\r\nDate=$3" x >"C:\replacer\move\%%f"
                                           )

这是第一个输出文件(显示正确)。

Name=John Smith
File Number=123456
Date=22/11/2013

然后所有其他输出文件都像这样(这是它在输入文件中的显示方式)。

Job Notes=Jane Smith 234567 22/11/2013 1:22:33 PM 654321

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

首先,与FINDSTR无关的问题 - 它没有按预期运行。您正在查找以Job Notes=开头的行,而是查找包含字符串^JobNotes=的任何行。除非使用/C:"literal search string"选项,否则FINDSTR会在空格处断开字符串。你的FINDSTR代码显然给出了正确的结果,因为只有想要的行包含字符串Notes=,但你可能不想依赖它。

您可以使用更正的文字搜索字符串来修复它:

FINDSTR /bc:"Job Notes:" ...

或更正的正则表达式:

FINDSTR /rc:"^Job Notes:" ...

关于你的实际问题 - REPL.BAT只会修改与提供的搜索字符串匹配的行;不匹配的线条保持不变。您可以通过附加A选项(仅限更改的行)来消除不匹配的行。但这只会隐藏你案件中的问题。

解决方案是修改正则表达式搜索字符串,使其正确匹配所有输入行。

我怀疑您的实际数据不包含Job Notes=Jane Smith 234567 22/11/2013 1:22:33 PM 654321,因为现有代码已正确修改该行。

为了让任何人都能帮助您,您必须更准确地了解每一行的格式(包括所有变体)。请发布一些不起作用的示例行,以及一些行。不要改变任何东西,除了修改名字中的字母,或者可能加扰数字 - 但不要改变任何位置的字符数或类型。

另一点 - 可以使用正确的REPL.BAT正则表达式添加FINDSTR命令并添加A选项。