2012-07-10 39 views
1

我想知道是否有人可以帮我编写一个相对简单的批处理文件命令,我可以使用它来使我的批处理文件的其余部分脱离。我在一个支持许多产品的支持小组工作,并且只有一个人明白XML配置文件。我所试图做的是以下几点: 这里是从配置文件的摘录:FINDSTR命令在一个批处理文件中显示变量输出

<!-- 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在这种情况下)...我只是不知道如何写出存储这个或如何输出它不同的东西....任何帮助将不胜感激!

+0

“laments turn”???我只能猜测你的意思是“外行的条款” – dbenham 2012-07-10 04:45:53

回答

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! 
+0

哇,你说得对,解析XML数据似乎很痛苦....当我研究这个时,我看到了grep和awk版本。我一定会更深入地研究这一点。非常感谢你的回复 – 2012-07-10 12:40:32

相关问题