找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 120|回复: 7

[文件操作] [已解决]求助完善BAT脚本批量移动相同前缀文件名到相同前缀文件夹内

[复制链接]
发表于 昨天 17:51 | 显示全部楼层 |阅读模式
本帖最后由 tttoi2000 于 2026-9-6 12:47 编辑

文件名举例如下
H210-2025-XS13(字符长度不同)-1(数字长度4位,且为自然数,前面无零)-1(数字长度2位,且为自然数,前面无零).pdf
H210-2025-XS13-1-1.pdf...H210-2025-XS13-1-99.pdf--->H210-2025-XS13-1
H210-2025-XS13-10-1.pdf...H210-2025-XS13-1-99.pdf--->H210-2025-XS13-10
H210-2025-XS13AC-1-1.pdf...H210-2025-XS13AC-1-99.pdf--->H210-2025-XS13AC-1
H210-2025-XS13AC-100-1.pdf...H210-2025-XS13AC-100-99.pdf--->H210-2025-XS13AC-100
H210-2025-X13AC-1000-1.pdf...H210-2025-X13AC-1000-99.pdf--->H210-2025-X13AC-1000
原BAT如下:
@echo off
for /f "tokens=1-4* delims=-" %%a in ('dir /b /a-d *-*-*-*-*.pdf') do (
        md "%%a-%%b-%%c-%%d" 2>nul
        move "%%a-%%b-%%c-%%d-*.pdf" "%%a-%%b-%%c-%%d" 2>nul
)
pause
有劳各位大侠,谢谢。
发表于 昨天 20:46 | 显示全部楼层
哪里需要完善?
 楼主| 发表于 昨天 21:16 | 显示全部楼层
移动时它会把
H210-2025-XS13-1-1.pdf、H210-2025-XS13-10-1.pdf、H210-2025-XS13-100-1.pdf会同时移到H210-2025-XS13-1文件夹里,想分归属到相应文件夹里
发表于 昨天 22:08 | 显示全部楼层
tttoi2000 发表于 2026-9-5 21:16
移动时它会把
H210-2025-XS13-1-1.pdf、H210-2025-XS13-10-1.pdf、H210-2025-XS13-100-1.pdf会同时移到H210 ...
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%i in ('dir /b /a-d "*-*-*-*.pdf"') do (
  4.         for /f "tokens=1-4 delims=-" %%a in ("%%~ni") do (
  5.                 if not exist "%%a-%%b-%%c-%%d\" (
  6.                         md "%%a-%%b-%%c-%%d\"
  7.                 )
  8.                 move "%%i" "%%a-%%b-%%c-%%d\"
  9.         )
  10. )
  11. pause
复制代码
发表于 昨天 23:32 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-9-5 23:38 编辑
tttoi2000 发表于 2026-9-5 21:16
移动时它会把
H210-2025-XS13-1-1.pdf、H210-2025-XS13-10-1.pdf、H210-2025-XS13-100-1.pdf会同时移到H210 ...


用 findstr 锚定每个字段及其数据类型,move 参数不用通配符 ...

test.bat (存放与 *.pdf 同目录)
  1. @echo off &for /f "tokens=1-5 delims=-" %%a in (
  2.    'dir /b /a-d "*-*-*-*-*.pdf" ^|findstr /i "[a-z0-9][0-9a-z]*-[0-9][0-9]*-[a-z0-9][a-z0-9]*-[0-9][0-9]*-[0-9][0-9]*.pdf" ') do (
  3.    if not exist "%%a-%%b-%%c-%%d" md "%%a-%%b-%%c-%%d"
  4.    move "%%a-%%b-%%c-%%d-%%e" "%%a-%%b-%%c-%%d" ) >nul 2>nul
  5. exit/b
复制代码
发表于 9 小时前 | 显示全部楼层
  1. @echo off
  2. setlocal
  3. cd /d "%~dp0"

  4. for /f "delims=" %%i in ('dir /b /a-d *.pdf') do (
  5.     for /f "tokens=1-4* delims=-" %%a in ("%%~ni") do (
  6.         md "%%a-%%b-%%c-%%d" 2>nul
  7.         move /y "%%i" "%%a-%%b-%%c-%%d\" >nul 2>&1
  8.     )
  9. )
  10. echo 归档完成
  11. pause
复制代码
发表于 7 小时前 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-9-6 11:00 编辑

   用 dir /b/a-d "*-*-*-*-*.pdf" 只能排除少于4个 - 分隔符的 pdf 文件(如果 move 采用 * 通配符也会放行更多的文件),用 findstr ... 可进一步匹配其中只有4个 - 分隔符的 pdf 文件,并同时匹配其每个字段的数据构成;
   如果当前目录中有多种命名格式混杂的 pdf 文件,采用上述 dir+findstr 组合过滤方法还是必要的...
 楼主| 发表于 5 小时前 | 显示全部楼层
多谢三位大侠,三个方法都可以正常按本人需求使用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-9-6 18:18

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表