我有这个代码用于循环目录中的 MP4 文件:
for /f "tokens=*" %%f in ('dir /b .\*.mp4') do (
call :processing "%%~nxf"
)
我的问题是如果MP4文件名有“!”字符,%%f 值将包含除“!”之外的所有字符。由于某种原因,“!”角色正在被剥离。如果直接执行for循环的dir命令,“!”外壳中打印字符。
任何想法为什么“!”不见了?
谢谢!
使用 !var! 的问题的可重现示例(延迟扩展开启)作为环境变量延迟扩展的语法。
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%f in ('dir /b .\*.mp4') do (
call :processing "%%~nxf"
)
goto :eof
:processing
echo %1
输出:
"there.mp4"
"hi.mp4"
禁用延迟扩展即可修复。这通常是默认设置,但 OP 代码不会显示其中一种方式。
@echo off
setlocal DISABLEDELAYEDEXPANSION
for /f "tokens=*" %%f in ('dir /b .\*.mp4') do (
call :processing "%%~nxf"
)
goto :eof
:processing
echo %1
输出:
"!there.mp4"
"hi!.mp4"