我正在尝试重命名我的文件以删除导致脚本出现问题的任何字符。这对于&号和感叹号非常有效,但是当文件具有百分号时,它不会显示在变量中。如何通过for循环传递带有特殊字符的文件?
for %%v in (*) do call :validate "%%v"
exit /b
:validate
set "original=%~nx1"
set "newtitle=%original:!=%"
set "newtitle=%newtitle:&=and%"
setlocal enabledelayedexpansion
set "newtitle=!newtitle:%%= percent!"
if not "%newtitle%"=="%original%" ren %1 "%newtitle%"
最佳答案
您的问题是行for %%v in (*) do call :validate "%%v",因为
call`第二次启动解析器,并且所有百分比都被评估第二次。
您应该将该值保存到变量中并在函数中访问这些变量。
setlocal DisableDelayedExpansion
for %%v in (*) do (
set "filename=%%~v"
call :validate
)
exit /b
:validate
setlocal EnableDelayedExpansion
set "original=!filename!"
set "newtitle=%original:!=exclam%"
set "newtitle=!newtitle:&=and!"
set "newtitle=!newtitle:%=percent!"
关于batch-file - 批处理 : How to replace % sign within a variable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44855180/