如何将文件移动至与文件名对应编号匹配的指定文件夹?
批量移动报表文件到对应编号文件夹的解决方案
刚好遇到过类似的批量文件整理需求,给你几个不同平台的实用方案,轻松搞定这个重复劳动:
Windows 命令提示符(CMD)
打开命令提示符,切换到这些文件所在的目录,运行下面的命令就能自动完成移动:
for /f "tokens=2 delims=_." %%i in ('dir /b AR_*.pdf BS_*.pdf') do ( if not exist "%%i\" mkdir "%%i\" # 如果文件夹不存在就自动创建 move "AR_%%i.pdf" "%%i\" move "BS_%%i.pdf" "%%i\" )
这段命令会从PDF文件名里提取出中间的编号(比如从AR_95000.pdf里拿到95000),然后把对应编号的AR和BS报表移到同名文件夹里,还会自动创建不存在的目标文件夹。
Windows PowerShell
如果更习惯用PowerShell,这段代码逻辑更清晰:
Get-ChildItem -Filter "*.pdf" | Where-Object { $_.Name -match "^(AR|BS)_(\d+)\.pdf$" } | ForEach-Object { $targetFolder = $matches[2] # 自动创建目标文件夹(如果不存在) if (-not (Test-Path $targetFolder)) { New-Item -ItemType Directory -Path $targetFolder | Out-Null } Move-Item -Path $_.FullName -Destination ".\$targetFolder\" }
它会先筛选出符合AR_xxxx.pdf或BS_xxxx.pdf格式的文件,用正则表达式提取编号,再把文件移动到对应文件夹。
Linux/macOS(Bash)
在终端里切换到文件所在目录,执行下面的脚本:
for file in AR_*.pdf BS_*.pdf; do # 从文件名中提取编号部分 num=${file#*_} num=${num%.pdf} # 自动创建目标文件夹(如果不存在) mkdir -p "$num/" mv "$file" "$num/" done
${file#*_}会去掉文件名开头到第一个下划线的内容,${num%.pdf}则去掉结尾的.pdf,得到目标文件夹的编号,然后移动文件过去,mkdir -p确保文件夹不存在时自动创建。
注意事项
- 确保你运行命令/脚本的目录就是这些文件和文件夹所在的目录,不然可能找不到文件或路径错误。
- 如果目标文件夹已经存在,这些命令不会覆盖里面的文件,只会移动指定的PDF过去。
内容的提问来源于stack exchange,提问作者Drp RD
相关产品推荐
相关产品推荐

