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

[文本处理] 求助bat脚本批量处理文件拷贝到相应文件夹的问题

[复制链接]
发表于 2023-3-15 12:27:27 | 显示全部楼层 |阅读模式
现在有一堆小文件,想利用bat实现一键归类,具体场景如下:

460_395_已处理__文件名:【2】样本交接单 9k 骆.pdf[du].1A.K.TIF
460_395_已处理__文件名:【2】样本交接单 9k 骆.pdf[du].2A.K.TIF
460_395_已处理__文件名:蓝螳螂+固安检查6K,郑.pdf[dq].1A.K.TIF
620_485_已处理__文件名:【2】内部签证单+人事异动表 4k 骆.pdf[db].1A.K.TIF
620_485_已处理__文件名:【2】内部签证单+人事异动表 4k 骆.pdf[db].2A.K.TIF
620_485_已处理__文件名:物资转库单 4k 骆.pdf[de].1A.K.TIF
620_485_已处理__文件名:输液卡 4K 何.pdf[df].1A.K.TIF

等等等等,有数百个这样的文件, 但是他们的前缀都是相同的,现在想要达到的效果是自动创建文件夹,并且把相应的文件拷贝到相应的文件夹里面,效果如下:

620_485_已处理__文件名:归类xxxx年xx月xx日 xx时xx分xx秒-----------yy
460_395_已处理__文件名:归类xxxx年xx月xx日 xx时xx分xx秒-----------yy

文件夹xx表示当前的电脑时间,后面的yy表示该文件夹内文件的个数
发表于 2023-3-15 14:46:13 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=1-2 delims=:" %%a in ('dir /b *.TIF') do (
  3.         md %%a >nul 2>nul
  4.         move "%%a:%%b" "%%a"
  5. )
  6. for /f "delims=" %%a in ('dir /b /ad') do (
  7.         for /f %%i in ('powershell -c "(dir %%a).length"') do (
  8.                 ren %%a %%a:归类%date:~0,4%年%date:~5,2%月%date:~8,2%日%time:~0,2%时%time:~3,2%分%time:~6,2%秒-----------%%i
  9.         )
  10. )
  11. pause
复制代码
发表于 2023-3-15 15:44:51 | 显示全部楼层
  1. @echo off
  2. rem 文件夹名称除了末尾那一串"-",不要存在"-"
  3. rem 支持新文件再次归入(已经存在文件夹及需要归入该文件夹的文件,归入后更新时间、数量。)
  4. cd /d "%~dp0"
  5. for /f "delims=" %%i in ('powershell -c "Get-Date -UFormat '%%Y年%%m月%%d日 %%H时%%M分%%S秒'"') do (
  6.         set "timeNow=%%i"
  7. )
  8. for /f "tokens=1* delims=:" %%a in ('dir /b /ad 2^>nul') do (
  9.         move "%%a*.*" "%%a:%%b" 1>nul 2>nul && (ren "%%a:%%b" "%%a:归类%timeNow%-----------000")
  10. )
  11. for /f "tokens=1* delims=:" %%a in ('dir /b /a-d 2^>nul ^| findstr /vie ".bat"') do (
  12.         if not exist "%%a:归类%timeNow%-----------000" (
  13.                 md "%%a:归类%timeNow%-----------000"
  14.         )
  15.         move "%%a:%%b" "%%a:归类%timeNow%-----------000"
  16. )
  17. setlocal enabledelayedexpansion
  18. for /f "tokens=1-2 delims=-" %%a in ('dir /b /ad') do (
  19.         pushd "%%a-----------%%b"
  20.         for /f "delims=" %%i in ('dir /b /a-d ^| find /c /v ""') do (
  21.                 set num=00%%i
  22.                 set num=!num:~-3!
  23.         )
  24.         popd
  25.         ren "%%a-----------%%b" "%%a-----------!num!"
  26. )
  27. endlocal
  28. pause
复制代码
发表于 2023-3-16 11:06:48 | 显示全部楼层
回复 1# 1989615wx


使用 dir + find 统计子文件夹内的文件个数,避免在for循环内部频繁调用PowerShell。
  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('dir /b /a-d *.TIF') do (
  3.     if not exist "%%a" (
  4.         md "%%a"
  5.     )
  6.     move "%%a:%%b" "%%a"
  7. )
  8. for /f "delims=" %%a in ('dir /b /ad') do (
  9.     for /f %%i in ('dir /b /a-d %%a ^| find /v /c ""') do (
  10.         ren "%%a" "%%a:归类%date:~0,4%年%date:~5,2%月%date:~8,2%日%time:~0,2%时%time:~3,2%分%time:~6,2%秒-----------%%i"
  11.     )
  12. )
复制代码
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
发表于 2023-3-16 11:12:27 | 显示全部楼层
回复 1# 1989615wx


BAT调用PowerShell获取日期时间,避免不同系统的日期时间格式差异导致代码出错。
  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('dir /b /a-d *.TIF') do (
  3.     if not exist "%%a" (
  4.         md "%%a"
  5.     )
  6.     move "%%a:%%b" "%%a"
  7. )
  8. for /f "delims=" %%i in ('powershell -c "Get-Date -UFormat '%%Y年%%m月%%d日%%H时%%M分%%S秒'"') do (
  9.         set "SysTS=%%i"
  10. )
  11. for /f "delims=" %%a in ('dir /b /ad') do (
  12.     for /f %%i in ('dir /b /a-d %%a ^| find /v /c ""') do (
  13.         ren "%%a" "%%a:归类%SysTS%-----------%%i"
  14.     )
  15. )
复制代码
参考:
http://bbs.bathome.net/thread-3328-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 03:33 , Processed in 0.016496 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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