标题: [文件操作] 批处理怎样把文件名相同的文件移动到一个文件夹中? [打印本页]
作者: honghong33 时间: 2017-1-22 15:21 标题: 批处理怎样把文件名相同的文件移动到一个文件夹中?
有许多文件,名称有字母数字构成,其中有一部分文件名前几位是相同的,只有最后一位或两位是数字(1,2,3,……9,10,11这样的)不同,把前面部分相同的文件移动到一个文件夹中,文件夹命名规则是【文件个数+相同部分】。比如
gjs5db1
gjs5db2
gjs5db3
移动到文件夹【3-gjs5db】中
作者: taofan712 时间: 2017-2-10 14:48
菜鸟做题,谢谢
不知道怎么提取相同文件名部分,所以需要手动指定- @echo on
- setlocal enabledelayedexpansion
- set /p alike=请输入相同文件名部分,如有多个,用空格隔开:
- for %%a in (%alike%) do (
- md _%%a 2>nul
- set n=
- for /f "delims=" %%b in ('dir /a-d /s /b "%cd%\%%a??.*" 2^>nul') do (
- set /a n+=1
- move /y "%%b" _%%a
- )
- ren _%%a !n!_%%a
- )
- pause>nul
复制代码
作者: 回家路上 时间: 2017-2-10 21:48
纯批其实不好玩- @echo off & setlocal enabledelayedexpansion
-
- :: 功能:
- :: 文件名前面相同多个的创建文件装起来
- :: 无相同得单独一个文件不管
-
- for /f "delims=" %%i in ('dir /a-d /b') do (
- set "name=%%~ni" & set "n=" & set "_n=" & set "pre="
- for %%j in (0,1,2,3,4,5,6,7,8,9) do (
- set name=!name:%%j=!
- set suf=!name:~-1!
- )
- set "name=%%~ni"
- rem 不想用goto,就假设名字中没有20个相同的字符
- for /l %%j in (1,1,20) do (
- if not defined n (
- for %%k in (!suf!) do set name=!name:*%%k=!
- set /a "tmp=name"
- if "!name!"=="!tmp!" set n=!name!
- )
- )
- set "name=%%~ni" & set "tmp="
- if defined n (
- for %%j in (!n!) do set pname="!name:%%j=" "!"
- for %%j in (!pname!) do (
- if defined pre (
- if "%%~j"=="" (
- set tmp=!n!
- ) else (
- if defined tmp (
- set "pre=!pre!!tmp!" & set "tmp="
- )
- set pre=!pre!!n!%%~j
- )
- ) else set pre=%%~j
- )
- rem 文件名有空格时影响set /a,先替换一下,完事换回来
- set pre=!pre: ={_}!
- set /a "#fnum[!pre!]+=1,_n=#fnum[!pre!]"
- set pre=!pre:{_}= !
- if !_n! gtr 1 (
- for /f "delims=" %%j in ("!pre!") do (
- if not "!%%j!"=="" (
- echo;文件夹:[!pre!]
- echo; 1. !%%j!
- rem echo;拷贝!%%j! --^> 文件夹%%j
- set "!pre!="
- )
- )
- echo; !_n!. %%~nxi
- rem echo;拷贝!name! --^> 文件夹!pre!
- ) else set !pre!=%%~nxi
- )
- )
- echo;--------------------------------------
- echo;打印一下数量,{_}代表空格
- set #fnum
-
- pause & exit /b
复制代码
作者: terse 时间: 2017-2-11 11:35
好久不玩了
这样行不- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /a-d /b') do (
- if not "%~nx0" == "%%i" (
- set n=0&set "name=%%~ni"
- set "str=!name!"
- for /l %%j in (0,1,2) do if !str:~-1! leq 9 set str=!str:~,-1!
- if exist "!str!*%%~xi" for /f "delims=" %%j in ('dir /a-d /b "!str!*%%~xi" 2^>nul') do (
- set "str1=%%~nj"
- for /l %%k in (0,1,2) do if !str1:~-1! leq 9 set str1=!str1:~,-1!
- if "!str1!" == "!str!" (
- set /an+=1
- set "name!n!=%%~fj"
- )
- )
- for /l %%j in (1,1,!n!) do (
- md "!n!_!str!" 2>nul
- move "!name%%j!" "!n!_!str!" 2>nul
- )
- )
- )
- pause
复制代码
作者: liziyunabcd 时间: 2020-5-16 18:19
回复 3# 回家路上
显示效果蛮牛,可没起效果,大神,就是没有创建文件夹,有没有其它大神知道怎么回事吗?
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |