[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

现在有一堆小文件,想利用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表示该文件夹内文件的个数

  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
复制代码

TOP

  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
复制代码
bat小白,请多指教!谢谢!

TOP

回复 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
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 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
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表