Windows bat 文件 for 循环丢失!文件名中的字符

问题描述 投票:0回答:1

我有这个代码用于循环目录中的 MP4 文件:

for /f "tokens=*" %%f in ('dir /b .\*.mp4') do (
    call :processing "%%~nxf"
)

我的问题是如果MP4文件名有“!”字符,%%f 值将包含除“!”之外的所有字符。由于某种原因,“!”角色正在被剥离。如果直接执行for循环的dir命令,“!”外壳中打印字符。

任何想法为什么“!”不见了?

谢谢!

windows for-loop batch-file cmd filenames
1个回答
0
投票

使用 !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"
© www.soinside.com 2019 - 2024. All rights reserved.