标题: [文件操作] 求批处理-根据文件名中相同字符创建文件夹并移入 [打印本页]
作者: 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 - @echo off &for /f "tokens=1 delims=0123456789" %%a in ('dir /b *.jpg') do (
- if not exist "%%a\" md "%%a"
- if exist "%%a*%%~xa" move /y "%%a*%%~xa" "%%a\"
- ) 2>nul
- 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 - @echo off &for /f "tokens=1-4 delims=_" %%1 in ('dir /b *.jpg') do for /f "tokens=1 delims=0123456789" %%a in ("%%4") do (
- md "%%1_%%2_%%3_%%a\"
- if exist "%%1_%%2_%%3_%%a*.jpg" move /y "%%1_%%2_%%3_%%a*.jpg" "%%1_%%2_%%3_%%a\"
- ) 2>nul
- pause&exit/b
复制代码
作者: ppll2030 时间: 2024-9-16 14:35
回复 1# xukan
把脚本保存为bat,跟图片放在一起运行即可。- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b/a-d') do (
- if %%~fa neq %~f0 (
- set "str=%%~na"&call :Eng %str%
- if not exist "!str!" md "!str!"
- move "%%a" "!str!"
- )
- )
- pause&exit/b
-
- :Eng
- set/a n+=1
- set last=%str:~-1%
- echo "%last%" | findstr /r "[A-Za-z]">nul &&exit/b|| set str=%str:~0,-1%&goto :Eng
复制代码
作者: 77七 时间: 2024-9-16 15:41
- @echo off
- cd /d "%~dp0"
- 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
- for /f "delims=" %%i in ('dir /b /a-d *.jpg ^| findstr /i "[a-z].*\.jpg$"') do (
- set n=%%~ni
- set "_n=%%~ni|"
- setlocal enabledelayedexpansion
- for %%a in (%az%) do (
- set "n=!n:%%a=\!"
- )
- for %%a in ("!n!|%%~xi") do (
- endlocal
- if "%%~na" equ "|" (
- set f=%%~ni
- ) else (
- call set "f=%%_n:%%~na=%%"
- )
- )
- call md "%%f%%" 2>nul
- call move "%%i" "%%f%%\"
- )
- pause
复制代码
作者: xukan 时间: 2024-9-16 16:17
回复 6# 77七
谢谢,你的代码基本解决了问题,能创建正确的文件夹名称并移入文件,但是只针对.jpg后缀,其余.png文件并没有处理,能无视后缀名吗?谢谢!!
作者: 77七 时间: 2024-9-16 16:30
回复 7# xukan
把第4行改为:
- 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 的版本如下
- @echo off &setlocal &for /f "delims=" %%a in ('dir /b *.*') do (set "v=%%~na"&set "xF=%%~xa" &call :yyy)
- endlocal&pause&exit/b
- :yyy
- if "%v:~-1%" geq "0" if "%v:~-1%" leq "9" set "v=%v:~0,-1%" &goto :yyy
- (md "%v%\" &if exist "%v%*%xF%" move /y "%v%*%xF%" "%v%\") 2>nul
- exit/b
复制代码
作者: qixiaobin0715 时间: 2024-9-18 10:50
本帖最后由 qixiaobin0715 于 2024-9-18 10:52 编辑
没有绝对通用的代码,代码需要根据要处理的问题不同,做出相应的调整。
比如,当你要处理的文件后面数字都是4位数的话:- @echo off
- setlocal enabledelayedexpansion
- set n=4
- for /f "delims=" %%i in ('dir /b /a-d^|findstr /e "[0-9]\.jpg [0-9]\.png"') do (
- set "str=%%~ni"
- set "NewFolder=!str:~,-%n%!"
- if not exist "!NewFolder!" md "!NewFolder!"
- move "%%i" "!NewFolder!\"
- )
- pause
复制代码
再比如,当你要处理的文件名后面数字与前面相连的那个字符如果是26个字母之一的话:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d^|findstr /e "[0-9]\.jpg [0-9]\.png"') do (
- set "str1=%%i"
- set "str2=%%~ni"
- 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= !"
- for %%k in (!str2!) do set "NewFolder=!str1:%%k%%~xi=!"
- if not exist "!NewFolder!" md "!NewFolder!"
- move "%%i" "!NewFolder!\"
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |