如何编写批处理命令批量移动32字符文件名的PDF文件
解决批处理移动固定长度文件名PDF的问题
Windows批处理的通配符中,*匹配0或多个任意字符,?匹配恰好1个任意字符。你之前用32个?的写法理论上应该匹配文件名主体(不含扩展名)正好32字符的PDF,但实际生效异常,大概率是因为对“文件名长度”的定义混淆(比如是否包含扩展名),或者遍历路径的逻辑问题。更可靠的方式是直接判断文件名的长度:
以下是修正后的批处理命令,会遍历当前目录及子目录下所有PDF文件,仅复制文件名主体长度为32字符的文件到目标目录:
@echo off setlocal enabledelayedexpansion set "targetDir=%cd%\AllFiles\" echo 目标目录: !targetDir! :: 遍历所有PDF文件 for /r %%f in (*.pdf) do ( :: 提取文件名主体(不含路径和扩展名) set "fileName=%%~nf" :: 判断文件名长度是否为32 if "!fileName:~32!"=="" ( if not "!fileName:~31!"=="" ( copy "%%f" "!targetDir!" echo 已复制: "%%f" ) ) ) endlocal
代码说明:
setlocal enabledelayedexpansion:启用延迟变量扩展,确保循环内的变量能正确更新%%~nf:提取当前文件的文件名主体(去掉路径和.pdf扩展名)!fileName:~32!:取文件名从第33个字符开始的部分,若为空则说明长度≤32!fileName:~31!:取文件名从第32个字符开始的部分,若不为空则说明长度≥32- 两个条件结合即可精准匹配长度为32的文件名主体
如果你的“文件名长度”是包含.pdf扩展名的总长度(即总长度32字符),只需把判断逻辑改成:
set "fullName=%%~nxf" if "!fullName:~32!"=="" if not "!fullName:~31!"=="" ...
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

