CMD脚本问题:文件名空格转义与排除含compressed后缀的文件
修正后的CMD脚本及问题解决说明
问题1:处理文件名中的空格
原脚本里call :test %%i没给文件名加引号,导致带空格的文件名被拆成多个参数,%1只能拿到空格前的部分。解决步骤:
- 给
for /f加上"delims=",确保dir输出的每一行(哪怕带空格)都被完整读取成%%i; - 调用
:test标签时把%%i用引号包起来:call :test "%%i",让整个文件名作为单个参数传递; - 在
:test标签里用%~f1就能正确解析出带空格的完整路径。
问题2:排除末尾含"compressed"的文件
原脚本的if "%1"=="*compressed.mov"没法用通配符匹配文件名,CMD的==是精确比对。这里提供两种实用解决方式:
方式1:字符串截取(高效直接)
利用CMD的字符串截取功能,取文件名(不含扩展名)的最后10个字符("compressed"刚好是10个字母),判断是否匹配:
if /i "%~n1:~-10%"=="compressed" goto :eof
/i参数实现不区分大小写的匹配。
方式2:findstr匹配(灵活适配复杂场景)
通过findstr检查文件名是否以"compressed"结尾:
echo "%~n1" | findstr /i /e "compressed" >nul if not errorlevel 1 goto :eof
/i:忽略大小写;/e:限定匹配行尾(也就是文件名末尾);>nul:屏蔽findstr的输出,只通过errorlevel判断是否匹配成功。
完整修正脚本
@ECHO OFF for /f "delims=" %%i in ('dir *.mov /b') do call :test "%%i" goto continue :test :: 排除文件名(不含扩展名)末尾为compressed的文件(不区分大小写) if /i "%~n1:~-10%"=="compressed" goto :eof :: 输出带空格的完整路径 echo "%~f1" goto :eof :continue pause
内容的提问来源于stack exchange,提问作者Rayearth
相关产品推荐
相关产品推荐

