在 .bat 脚本中保存字符串变量时出现问题

Problem saving string variables in .bat script

正如标题所说,我在我的 bat 脚本中保存(并因此打印)字符串变量时遇到问题。当我尝试使用以 and/or 开头并以“!”结尾的字符串时会出现问题。示例:

@echo off
pause
setlocal ENABLEDELAYEDEXPANSION
for /r %%f in (*.png *.jpg *.gif *.webp *.jpeg) do (

set curr_name=%%~nxf
set curr_path=%%~dpf

@echo !curr_path!!curr_name!

@echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
)
pause

对于名为 !a.pnga!.png 的文件,它会打印出 a.png 而对于 !a!.png 它只是打印出 .png。我一直试图为此找到答案,但没有运气。对不起,如果我在这里遗漏了一些明显的东西,谢谢你的任何提示!

启用延迟扩展后,这是预期的行为。您显示的用例不需要分配变量 - 您可以只使用相关的 For 变量修饰符。

如果出于某种原因您需要使用延迟扩展(例如执行子字符串修改),则应在分配变量后的循环中打开/关闭延迟扩展:

示例:

@echo off

 for /r %%f in (*.png *.jpg *.gif *.webp *.jpeg) do (
  set "curr_name=%%~nxf"
  set "curr_path=%%~dpf"
  Setlocal enabledelayedexpansion
  echo(!curr_path!!curr_name!
  endlocal
  @echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 )

pause