batch-file - 批处理 : How to replace % sign within a variable?

标签 batch-file escaping invalid-characters

我正在尝试重命名我的文件以删除导致脚本出现问题的任何字符。这对于&号和感叹号非常有效,但是当文件具有百分号时,它不会显示在变量中。如何通过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/

相关文章:

java - 如果我的批处理文件路径中有空格,为什么会出现错误?

ansible - 如何使用 Ansible 或 Jinja2 转义变量名中的冒号 (":")?

javascript - 在 witt 的最后...... Javascript 不会取代 '\n' !

python - 正则表达式匹配无效的 Unicode 字符

windows - cmd.exe 是 shell、终端仿真器还是两者兼而有之?

windows - 在 .bat/.cmd 程序中更改 if block 中的变量

batch-file - 有没有办法同时启动VBS和BATCH脚本

c# - 在 .NET 中创建 Uri 会自动对传递的字符串中的所有参数进行 urldecode

java - 处理 xslt 包含中的非法 URI 字符

mysql - 如何调试 Etherpad Lite 数据库中 MySQL utf8mb4 列中的无效数据