Batch file 提取两个字符串之间的内容

Batch file 提取两个字符串之间的内容,batch-file,Batch File,我想创建一个简单(希望如此)的批处理文件,它可以搜索XML文件并从两个字符串之间提取内容 XML文件始终包含以下内容一次: John Smith 这将位于XML中的某个位置,但每次可能位于不同的位置/行。如果可能的话,我需要把名字提取出来,做成一个变量 编辑 到目前为止,我一直在使用findstrfor/F“tokens=2 delims=%%a in('findstr”“C:\list.xml')do set name=%%a echo%name%名称可能是3个或4个单词,有时还包含-上述内容

我想创建一个简单(希望如此)的批处理文件,它可以搜索XML文件并从两个字符串之间提取内容

XML文件始终包含以下内容一次:
John Smith

这将位于XML中的某个位置,但每次可能位于不同的位置/行。如果可能的话,我需要把名字提取出来,做成一个变量

编辑
到目前为止,我一直在使用findstr
for/F“tokens=2 delims=%%a in('findstr”“C:\list.xml')do set name=%%a echo%name%
名称可能是3个或4个单词,有时还包含-上述内容有时有效,但仅在单独的行上有效,但情况并非总是如此

John Smith
总是在一起,总是在同一条线上,但不总是在自己单独的线上

示例XML数据(全部在一行上)
John Smith11Main42hin

@ECHO Off
SETLOCAL
设置“sourcedir=U:\sourcedir”
设置“filename1=%sourcedir%\q36630524.txt”
对于('FINDSTR/i/L/c:“%filename1%”)中的/f“delims=“%%a”,请设置“name=%%a”
设置“name=%name:*%”

对于/f“delims=我们不为您编写代码,请向我们展示您到目前为止所拥有的。”(希望)简单”-正好有三行代码。@Stephan-您是否将
@echo off
包含在其中?因为对于给定的数据,假设名称是硬编码的,这是一行。@egtrev将其编辑到您的文章中,而不是在注释中。@somethingsdark是的,如果您可以确定,
John Smith
在自己的行中,没有其他标记。我的想法和马古的几乎一样。(1.
for
2.
set
3.
for
)谢谢,当点击下面的部分
set“name=%name:*=%”时,我得到了一个意想不到的结果。
如果您想测试,我已经将XML单行数据的示例添加到了原始帖子中。我将您的数据行添加到了我的测试文件中。对我来说很好。请确保您只需剪切并粘贴发布的代码,然后仅更改文件/目录名。批处理甚至可以显示对轻微格式更改的敏感性。记事本因试图“格式化”文本而臭名昭著,假设它是文字处理器。确保文件保存为ASCII文本而不是Unicode文本。首选使用文本编辑器(我使用Editplus()或使用Notepad++。如果仍然不起作用,请尝试添加
ECHO“%name%”
之前的一行上设置
命令以查看正在处理的
名称
。引号非常重要。我将Notepad++设置为ASCI,所有操作都没有错误。感谢您的帮助和解释步骤。另外一个小问题是,一些名称之间有a-和空格,如
John-Smith
问题是-的输出看起来像这样
JohnΓôSmith
(由于我正在搜索的XML文件的格式,所以猜测)最后我尝试了以下方法来替换它
set name=%name:Γô=%
,但是
Γô
没有被替换这里的问题是
cmd
在非ASCII字符方面很差。名称之间的
-
实际上是多种多样的(uni)代码序列-可能源于文字处理器。如果使用十六进制编辑器查看实际的字节序列,则可以使用
sed
awk
将该序列更改为
-
。如果将处理后的名称输出到文件(
>afilename echo%name%
),则可以使用十六进制编辑器(谷歌…)要确定要替换的十六进制序列,然后通过
sed
^ sed s/\xab\xcd/-/g
(ab,cd=hex chars found)-GNUSED引导
findstr
输出将是一个不错的选择。