代码是:
setlocal EnableDelayedExpansion
FOR /f "usebackq tokens=*" %%X in (`dir /a-d /s /b "!search_path!" 2^>^&1`) DO @(
set file_path=%%X
rem do other stuff
)
延迟扩展是打开的,因为源路径可能有特殊字符,如反引号百分比感叹号和 ^ 转义唱。Windows 路径中允许所有这些字符,我不知道它们是否会出现以及出现在哪里。问题出现了如何处理双百分比参数 %%X,如何将其传递给另一个变量而不进行扩展。如果 DE 在感叹号上,则 sings 将被视为变量,这将导致一系列奇怪的错误。同样的事情是如果我禁用 DE - 同样的情况,但这次是百分比。
任何想法如何使这些行对于可以在 Windows 系统中找到的每个可能的允许路径都安全,无论字符多么奇怪?
问题归结为如何将数据从参数的双百分比安全传递到正常状态%variable%
,以便从那一刻起数据可以安全地通过延迟扩展传递。