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

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

[复制链接]
发表于 2024-9-16 11:48:02 | 显示全部楼层 |阅读模式
本帖最后由 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的文件夹并将对应文件移入
发表于 2024-9-16 12:24:22 | 显示全部楼层
回复 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
复制代码
 楼主| 发表于 2024-9-16 12:53:05 | 显示全部楼层
回复 2# aloha20200628

抱歉,是我没说明清楚,文件名是这样格式的ABCDE_No.562_82P_ABCDEFG04632.jpg,把No的o识别成了最后一个字母,应该是G才对。
发表于 2024-9-16 13:28:20 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2024-9-16 14:35:02 | 显示全部楼层
回复 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
复制代码
发表于 2024-9-16 15:41:33 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2024-9-16 16:17:11 | 显示全部楼层
回复 6# 77七


    谢谢,你的代码基本解决了问题,能创建正确的文件夹名称并移入文件,但是只针对.jpg后缀,其余.png文件并没有处理,能无视后缀名吗?谢谢!!
发表于 2024-9-16 16:30:42 | 显示全部楼层
回复 7# xukan


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

评分

参与人数 1技术 +1 收起 理由
xukan + 1 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-9-16 16:38:59 | 显示全部楼层
本帖最后由 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

复制代码
发表于 2024-9-18 10:50:06 | 显示全部楼层
本帖最后由 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 20:58 , Processed in 0.030651 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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