1

我想知道是否有人可以帮助我编写一个相对简单的批处理文件命令,我可以用它来建立我的批处理文件的其余部分。我在一个支持许多产品的支持小组中工作,其中有一个特别是我是唯一一个了解 XML 配置文件的人。我想要做的是以下内容:这是配置文件的摘录:

<!-- FILEDROP SETTINGS -->
  <!-- metadataType = X - XML; F - Flat file; E - embedded in filename; B - embedded PDF with bookmarks  -->
        <add key="metadataType" value="E" />

我要做的是创建一些用户可以运行的 GUI(批处理文件)。运行批处理文件时,将提示用户输入要搜索的文件的名称。在此示例中,文件名为 importer.config。我希望批处理文件搜索字符串

<add key="metadataType" value="E" />

在这种情况下,我希望它采用引号“E”之间的值并将某些内容输出到 DOS 窗口以让用户知道,该组件使用嵌入在文件名中的元数据。当然,如果值为 F,则此组件使用平面文件中的元数据....我只是想在感叹中将其拼写给用户,而不是让用户搜索这个大的大型配置文件,因为他们从来没有似乎知道去哪里找。

任何可以提供帮助的人都将是一个巨大的帮助,因为这将是我其余代码向用户显示值的基础。我认为使用正则表达式和 FINDSTR 可能是最好的,但我尝试了很多东西但无法让它工作

就像是:(?<=<add key="metadataType" value=")\w

这将查找我需要的字符串,然后获取后面的值(在这种情况下为 E)...我只是不知道如何写出将其存储在哪里或如何将其输出到不同的东西...任何帮助将不胜感激!

4

1 回答 1

2

FINDSTR 的正则表达式支持受到严格限制,并且其中的内容不像您在传统实现中所习惯的那样工作。通过键入help findstrfindstr /?从命令窗口阅读文档。我还推荐阅读Windows FINDSTR 命令有哪些未记录的功能和限制?. 正则表达式奇怪的描述在答案的底部。

您可以下载并使用 awk、grep、sed 或 perl 之类的 Windows 版本。或者您可以使用 VBScript 或 JScript。

使用本机批处理解析 XML 是一场噩梦。您可以尝试以下方法。它不是很健壮,但在大多数情况下都可以使用:

@echo off
setlocal enableDelayedExpansion
for /f "delims=" %%A in ('findstr /rc:"\<add key=[\"\"]metadataType[\"\"] value=[\"\"]" "fileName.txt"') do set "ln=%%A"
set ^"ln=!ln:*"metadataType" value=!"
for /f delims^=^=^" %%A in ("!ln!") do set value=%%A
echo value=!value!
于 2012-07-10T05:09:44.143 回答