我有一个名为 pictures.xml 的文件,它包含一些图片信息,例如:
<ResourcePicture Name="a.jpg">
<GeneratedPicture Name="b.jpg"/>
<GeneratedPicture Name="c.jpg"/>
</ResourcePicture>
<ResourcePicture Name="z1.jpg">
<GeneratedPicture Name="z2.jpg"/>
<GeneratedPicture Name="z3.jpg"/>
<GeneratedPicture Name="z4.jpg"/>
</ResourcePicture>
我想做的是让每一行进入for循环并打印图片名称。示例输出如下:
- a.jpg - b.jpg c.jpg
- z1.jpg - z2.jpg z3.jpg z4.jpg
我可以获取每一行但无法获取name属性
for /f "Delims=/" %%a in (pictures.xml) do (
echo %%a
)
最佳答案
这应该有效:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "tokens=*" %%a in (pictures.xml) DO (
SET b=%%a
SET b=!b:"=+!
FOR /F "delims=+ tokens=2" %%c in ("!b!") DO (
ECHO %%c
)
)
这将只输出something.jpg
。这里解释:
首先,我们将文件分成几行。现在我们想在每一行中找到 something.jpg 并只输出这些标记。所以我们可以用 "
作为分隔符来分割行并取第二个子字符串。但是我们不能使用 "
作为分隔符,因为 CMD 不会接受这个。这就是我们首先将 "
替换为 +
的原因。如果 +
可以出现在您的代码中,请使用其他被接受为分隔符但不会被接受的字符在您的 xml 文件中。
最后,我们现在可以使用 +
作为分隔符拆分每一行,并获取每行的第二个子字符串,这将只生成文件名。
编辑:以下是检查您的行是否以“ResourcePicture”开头的方法:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%a in (pictures.xml) do (
SET b=%%a
SET prefix=!b:~1,15!
IF !prefix!==ResourcePicture (
SET b=!b:"=+!
FOR /F "delims=+ tokens=2" %%c in ("!b!") DO (
ECHO %%c
)
)
)
关于windows - 使用批处理脚本进行字符串解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30997604/