批处理脚本无法将含公共名称的影视文件移入对应文件夹如何修改
问题原因
原脚本的匹配逻辑与实际场景不匹配:原脚本判断「文件名是否包含完整文件夹名」,但你的文件夹名称是公共前缀 + 自定义后缀格式,文件名仅包含公共前缀部分,因此无法触发匹配规则。
修改后的批处理脚本
@echo off setlocal enabledelayedexpansion pushd "%~1" :: 遍历所有待移动文件 for /F "USEBACKQ tokens=*" %%a in (`dir /b /a:-d 2^>nul`) do ( set "_file=%%a" :: 遍历所有已存在的分类文件夹 for /D %%b in (*) do ( set "_dir=%%b" :: 提取文件夹名中第一个 "-" 之前的部分作为匹配前缀 for /F "delims=- tokens=1" %%c in ("!_dir!") do ( set "_prefix=%%c" :: 去除前缀末尾多余的空格,避免匹配失败 set "_prefix=!_prefix:~0,-1!" :: 判断文件名是否包含匹配前缀 if NOT "x!_file:*!_prefix!=!" == "x!_file!" ( move "%%a" "%%b\" :: 匹配成功后跳出文件夹循环,避免重复移动 goto :nextfile ) ) ) :nextfile ) popd endlocal
逻辑说明
- 自动过滤无文件时的系统报错,所有路径默认加引号兼容空格、特殊符号场景
- 对每个文件夹名称,按分隔符
-切割后取第一部分作为公共匹配前缀,自动去除前缀末尾冗余空格 - 匹配规则改为「判断文件名是否包含提取到的公共前缀」,匹配成功后直接移动文件并跳过后续文件夹匹配,避免重复操作
内容的提问来源于stack exchange,提问作者user3520363
相关产品推荐
相关产品推荐

