批处理文件 - 无法读取变量

Batch file - can not read a variable

制作生成预览的批处理(这部分代码一切正常)并重命名文件,删除文件名中“_”之后的所有内容。例如 ABAB_abab.png > ABAB.png 我的代码在字符串中没有看到变量 yy:set zz=!xx:yy=!将其视为两个字母 yy,而不是变量。如何解决?

这是脚本

setlocal enabledelayedexpansion

    for %%a in ("*.png") do (
    set xx=%%~na
    set yy=_!xx:*_=!
    set zz=!xx:yy=!
    
    echo xx= !xx! @rem (okay, returns ABAB_abab)
    echo yy= !yy! @rem (okay, returns _abab)
    echo zz= !zz! @rem (wrong, returns ABAB_abab without any substitutions)
    pause
    )
endlocal

感谢您的帮助

这里有一个简单的例子,向您展示了实现另一层扩展的方法:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion

For %%G In ("*.png") Do (
    Set "xx=%%~nG"
    SetLocal EnableDelayedExpansion
    Set "yy=_!xx:*_=!"
    For %%H In ("!yy!") Do Set "zz=!xx:%%~H=!"
    Echo xx = "!xx!"
    Echo yy = "!yy!"
    Echo zz = "!zz!"
    EndLocal
    Pause
)

双引号包含在 Echo 命令中只是为了在您的字符串中有任何空格时更好地可视化,不需要它们用于任何其他目的。

请注意,对于基本名称以一个或多个下划线 _.[= 开头的任何 .png 文件,这将无法实现您的意图14=]