Board logo

标题: [文件操作] 求批处理-根据文件名中相同字符创建文件夹并移入 [打印本页]

作者: xukan    时间: 2024-9-16 11:48     标题: 求批处理-根据文件名中相同字符创建文件夹并移入

本帖最后由 xukan 于 2024-9-16 12:03 编辑

例:abc0010.jpg、abc0014.jpg、abc0017.jpg
      ade0020.jpg、ade0021.jpg、ade0025.jpg
      cde0621.png、cde0625.png、cde0629.png
      文件都在同一个文件夹中,文件名的识别只到最后一个字母为止,创建名为abc、ade、cde的文件夹并将对应文件移入
作者: aloha20200628    时间: 2024-9-16 12:24

回复 1# xukan
  1. @echo off &for /f "tokens=1 delims=0123456789" %%a in ('dir /b *.jpg') do (
  2. if not exist "%%a\" md "%%a"
  3. if exist "%%a*%%~xa" move /y "%%a*%%~xa" "%%a\"
  4. ) 2>nul
  5. pause&exit/b
复制代码

作者: xukan    时间: 2024-9-16 12:53

回复 2# aloha20200628

抱歉,是我没说明清楚,文件名是这样格式的ABCDE_No.562_82P_ABCDEFG04632.jpg,把No的o识别成了最后一个字母,应该是G才对。
作者: aloha20200628    时间: 2024-9-16 13:28

本帖最后由 aloha20200628 于 2024-9-16 13:58 编辑

回复 3# xukan
  1. @echo off &for /f "tokens=1-4 delims=_" %%1 in ('dir /b *.jpg') do for /f "tokens=1 delims=0123456789" %%a in ("%%4") do (
  2. md "%%1_%%2_%%3_%%a\"
  3. if exist "%%1_%%2_%%3_%%a*.jpg" move /y "%%1_%%2_%%3_%%a*.jpg" "%%1_%%2_%%3_%%a\"
  4. ) 2>nul
  5. pause&exit/b
复制代码

作者: ppll2030    时间: 2024-9-16 14:35

回复 1# xukan

把脚本保存为bat,跟图片放在一起运行即可。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /b/a-d') do (
  3.     if %%~fa neq %~f0 (
  4.         set "str=%%~na"&call :Eng %str%
  5.         if not exist "!str!" md "!str!"
  6.         move "%%a" "!str!"
  7.     )
  8. )
  9. pause&exit/b
  10. :Eng
  11. set/a n+=1
  12. set last=%str:~-1%
  13. echo "%last%" | findstr /r "[A-Za-z]">nul &&exit/b|| set str=%str:~0,-1%&goto :Eng
复制代码

作者: 77七    时间: 2024-9-16 15:41

  1. @echo off
  2. cd /d "%~dp0"
  3. set az=q w e r t y u i o p a s d f g h j k l z x c v b n m
  4. for /f "delims=" %%i in ('dir /b /a-d *.jpg ^| findstr /i "[a-z].*\.jpg$"') do (
  5. set n=%%~ni
  6. set "_n=%%~ni|"
  7. setlocal enabledelayedexpansion
  8. for %%a in (%az%) do (
  9. set "n=!n:%%a=\!"
  10. )
  11. for %%a in ("!n!|%%~xi") do (
  12. endlocal
  13. if "%%~na" equ "|" (
  14. set f=%%~ni
  15. ) else (
  16. call set "f=%%_n:%%~na=%%"
  17. )
  18. )
  19. call md "%%f%%" 2>nul
  20. call move "%%i" "%%f%%\"
  21. )
  22. pause
复制代码

作者: xukan    时间: 2024-9-16 16:17

回复 6# 77七


    谢谢,你的代码基本解决了问题,能创建正确的文件夹名称并移入文件,但是只针对.jpg后缀,其余.png文件并没有处理,能无视后缀名吗?谢谢!!
作者: 77七    时间: 2024-9-16 16:30

回复 7# xukan


   
把第4行改为:
  1. for /f "delims=" %%i in ('dir /b /a-d ^|find /v "%~nx0" ^| findstr /i "[a-z].*\."') do (
复制代码

作者: aloha20200628    时间: 2024-9-16 16:38

本帖最后由 aloha20200628 于 2024-9-16 16:42 编辑

回复 3# xukan

兼容不同命名格式 abc0010.jpg 或 ABCDE_No.562_82P_ABCDEFG04632.png 的版本如下
  1. @echo off &setlocal &for /f "delims=" %%a in ('dir /b *.*') do (set "v=%%~na"&set "xF=%%~xa" &call :yyy)
  2. endlocal&pause&exit/b
  3. :yyy
  4. if "%v:~-1%" geq "0" if "%v:~-1%" leq "9" set "v=%v:~0,-1%" &goto :yyy
  5. (md "%v%\" &if exist "%v%*%xF%" move /y "%v%*%xF%" "%v%\") 2>nul
  6. exit/b
复制代码

作者: qixiaobin0715    时间: 2024-9-18 10:50

本帖最后由 qixiaobin0715 于 2024-9-18 10:52 编辑

没有绝对通用的代码,代码需要根据要处理的问题不同,做出相应的调整。
比如,当你要处理的文件后面数字都是4位数的话:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=4
  4. for /f "delims=" %%i in ('dir /b /a-d^|findstr /e "[0-9]\.jpg [0-9]\.png"') do (
  5.     set "str=%%~ni"
  6.     set "NewFolder=!str:~,-%n%!"
  7.     if not exist "!NewFolder!" md "!NewFolder!"
  8.     move "%%i" "!NewFolder!\"
  9. )
  10. pause
复制代码
再比如,当你要处理的文件名后面数字与前面相连的那个字符如果是26个字母之一的话:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d^|findstr /e "[0-9]\.jpg [0-9]\.png"') do (
  4.     set "str1=%%i"
  5.     set "str2=%%~ni"
  6.     for %%j in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do set "str2=!str2:%%j= !"
  7.     for %%k in (!str2!) do set "NewFolder=!str1:%%k%%~xi=!"
  8.     if not exist "!NewFolder!" md "!NewFolder!"
  9.     move "%%i" "!NewFolder!\"
  10. )
  11. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2