使用批处理脚本进行字符串解析
String parsing with batch scripting
我有一个名为 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 并只输出这些标记。所以我们可以用 "
作为分隔符拆分行并取第二个子字符串。但是我们不能使用 "
作为 delim 因为 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
)
)
)
我有一个名为 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 并只输出这些标记。所以我们可以用 "
作为分隔符拆分行并取第二个子字符串。但是我们不能使用 "
作为 delim 因为 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
)
)
)