windows - 使用批处理脚本进行字符串解析

标签 windows string parsing batch-file xml-parsing

我有一个名为 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循环并打印图片名称。示例输出如下:

  1. a.jpg - b.jpg c.jpg
  2. 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/

相关文章:

java - 字符串的Android工具栏字幕

java - 从 Java 源代码中获取所有使用过的类名的列表

windows - Windows 10 : "CheckForUpdateImpl: Couldn' t write out staging user ID, 上的 SourceTree 安装失败此用户可能不应该获得任何测试版:“

java - 从字符串中的子字符串的右到左获取下一次出现(Java)

javascript - 如何更改 "with '

parsing - 为什么 Parsec 的 sepBy 停止并且不解析所有元素?

c++ - 在 Spirit.X3 中处理带引号和不带引号的字符串的最简洁方法

python - 无法导入 python 扩展

c++ - 在特定功能上测量新/旧代码 CPU 使用率

windows - 如何在调用 CMenu::LoadMenu 后附加一个动态菜单项?