【问题标题】:Extract specific text from text file using batch使用批处理从文本文件中提取特定文本
【发布时间】:2014-01-21 14:15:27
【问题描述】:

我正在尝试使用批处理代码从文本文件中提取特定文本。我需要从中提取数据的文件将包含多行文本,并且行数会有所不同,这意味着指标的位置也会发生变化。这是文本文件的示例:

文件 1:

<File>
<General>
   <Primary_1>1.2.3.4.5</Primary_1>
   <Secondary_2>9.8.7.6.5</Secondary_2>
</General>
<Main_List>
   <Details="Title" One="C:\Folder1\Folder2\Folder3\Folder4\Folder5" Two="I" Three="4"/>
</Main_List>
</File>

我已经进行了一些操作,并从文本文件中提取了包含我需要的数据的行并将其保存到两个单独的文本文件中,所以我最终得到了这个:

文件 2:

   <Primary_1>1.2.3.4.5</Primary_1>

文件 3:

<Details="Title" One="C:\folder1\folder2\folder3\folder4" Two="A" Three="5"/>

所以,从上面的两个文件(文件 2 和文件 3)中,我需要能够提取两个值。第一个在 |Primary_1| 之间和 |/Primary_1|指标...在这种情况下,我需要提取“1.2.3.4.5”值。第二个是 |Details="| 之后和 |" 之前的值一个=|指标...在这种情况下,我需要提取“标题”值。

我四处搜寻,找不到任何符合要求的东西。我找到的最接近的是“......在同一行......”代码(Extract part of a text file using batch dos),但我不断收到错误。任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    当两行都在 file.txt 中时试试这个

    如果文件中没有 TAB,它适用于给定的 txt。

    @echo off
    for /f "tokens=2 delims=<> " %%a in ('find "<Primary_1>" ^< "file.txt" ') do echo "%%a"
    for /f "tokens=2 delims==" %%a in ('find "<Details =" ^< "file.txt" ') do SET "xtitle=%%a"
    SET ntitle=%xtitle:~1%
    SET xtitle="%xtitle%"
    ECHO +%ntitle%+ or +%xtitle%+ - your choice...
    

    如果您想要的文本包含空格,则有一个更强大的方法使用帮助批处理文件。

    (Magoo 的小痒痒 - 允许在引用的“标题”字符串中使用空格 - 但我不知道是否需要引用或未引用的变量内容......所以你得到了两者。(不收取额外费用)

    【讨论】:

    • 第一个“for”行完美运行并提取了正确的信息......“1.2.3.4.5”数据。但是,第二个“for”行拉出了“Details”而不是“Title”。我错过了什么吗?谢谢。
    • 我的错。看起来我错过了第三个文件中的空格,如下所示:
      我将如何修改在第二个 for 语句中使用 delims 来容纳这个空间?空格位于单词详细信息和等号之间。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多