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

[文件操作] 求批处理-根据文件名中相同字符创建文件夹并移入

本帖最后由 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的文件夹并将对应文件移入

本帖最后由 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
复制代码

TOP

本帖最后由 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
复制代码

TOP

回复 7# xukan


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

评分人数

    • xukan: 感谢给帖子标题标注[已解决]字样技术 + 1
bat小白,请多指教!谢谢!

TOP

回复 6# 77七


    谢谢,你的代码基本解决了问题,能创建正确的文件夹名称并移入文件,但是只针对.jpg后缀,其余.png文件并没有处理,能无视后缀名吗?谢谢!!

TOP

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

TOP

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

TOP

本帖最后由 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
复制代码

TOP

回复 2# aloha20200628

抱歉,是我没说明清楚,文件名是这样格式的ABCDE_No.562_82P_ABCDEFG04632.jpg,把No的o识别成了最后一个字母,应该是G才对。

TOP

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

TOP

返回列表