使用批处理从文本文件中提取特定文本

时间:2014-01-21 14:15:27

标签: batch-file

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

文件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),但我一直在收到错误。任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分: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的小痒 - 在引用的“标题”字符串中允许空格 - 但我不知道该要求是针对引用或不引用的变量内容......所以你得到两者。(不收取额外费用)