批处理文件中的FINDSTR命令显示变量输出

时间:2012-07-10 03:58:02

标签: regex file batch-file findstr

我想知道是否有人可以帮我写一个相对简单的批处理文件命令,我可以使用该命令来完成我的批处理文件的其余部分。我在一个支持许多产品的支持小组中工作,并且有一个特定的,我是唯一了解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)...我只是不知道如何写出存储它的位置或如何将其输出到不同的...任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

对FINDSTR的正则表达式支持受到严格限制,并且它的作用与传统实现中的习惯不同。通过在命令窗口中键入help findstrfindstr /?来阅读文档。我还建议阅读What are the undocumented features and limitations of the Windows FINDSTR command?。正则表达式奇怪的描述是在答案的底部。

您可以下载并使用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!