Board logo

标题: [文件操作] 批处理如何把文件按4个一组放文件夹里并改名为1 2 3 4 [打印本页]

作者: laolou01    时间: 2020-11-29 19:13     标题: 批处理如何把文件按4个一组放文件夹里并改名为1 2 3 4

例如:文件夹里有400个文件   按顺序1 2  3  4 5 .....400这样下来的    如何把他们分开4个一组放到文件夹里      把1234放文件夹1(名称1234)    把5678放文件夹2(改为1234)      把9 10 11 12放文件夹3(改为1234)     类推      求大神给个代码
作者: flashercs    时间: 2020-11-29 20:56

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. cd /d "%~dp0"
  4. set /a fn=1,dn=1,groupCount=4
  5. if not exist "文件夹!dn!\" md "文件夹!dn!\"
  6. for %%A in (*) do (
  7.   copy /y "%%A" "文件夹!dn!\"
  8.   if !fn! geq !groupCount! (
  9.     ren "文件夹!dn!" "!dn!"
  10.     set /a fn=1,dn+=1
  11.     if not exist "文件夹!dn!\" md "文件夹!dn!\"
  12.   ) else (
  13.     set /a fn+=1
  14.   )
  15. )
  16. endlocal
  17. exit /b
复制代码

作者: qixiaobin0715    时间: 2020-11-30 07:02

for 提取文件名的顺序好像是1/10/11/12.../100/101... ,2/20/21.../200/201...
作者: qixiaobin0715    时间: 2020-12-1 10:42

本帖最后由 qixiaobin0715 于 2020-12-1 11:08 编辑

如果是数字命名的话,文件扩展名是txt,这样应当可以:
  1. @echo off
  2. md 1,2,3,4
  3. setlocal EnableDelayedExpansion
  4. set /a FlolderNames=0,n=0,m=0
  5. for /l %%a in (1,1,400) do (
  6.     set /a x=%%a%%4
  7.     set /a y=%%a%%16
  8.     set /a n+=1
  9.     set /a FileNames=n+m
  10.     if !x!==1 (
  11.         set /a FlolderNames+=1
  12.     )
  13.     move %%a.txt !FlolderNames!\!FileNames!.txt
  14.     if !x!==0 (
  15.         set n=0
  16.     )
  17.     if !y!==0 (
  18.         set FlolderNames=0
  19.         set /a m+=4
  20.     )
  21. )
  22. pause
复制代码

作者: terse    时间: 2020-12-1 14:28

本帖最后由 terse 于 2020-12-1 23:01 编辑

数字命名的话 这样算法呢
不是数字命名的话 递加一下即可
改名称1234 这个怎么理解的 重命名吗
  1. @echo off&setlocal enabledelayedexpansion
  2. md 1,2,3,4 >nul 2>nul
  3. for /l %%i in (1,1,400) do (
  4.      set /a "n=(%%i-1)/4%%4+1"
  5.      move "%%i.txt" "!n!\"
  6. )
  7. pause
复制代码
重命名处理 假设文件后缀txt
  1. @echo off&setlocal enabledelayedexpansion
  2. md 1,2,3,4 >nul 2>nul
  3. for /l %%i in (1,1,400) do (
  4.      set /a "n=(%%i-1)/4%%4+1"
  5.      set /a "_!n!+=1"
  6.      for %%j in (_!n!) do move "%%i.txt" "!n!\!%%j!.txt"
  7. )
  8. pause
复制代码

作者: qixiaobin0715    时间: 2020-12-1 14:54

我的理解,楼主的意思是:
将400个文件按顺序分别4个4个的移到1-4文件夹并按数字顺序重命名,最终结果1-4文件夹的文件名都是1-100的数字。
作者: qixiaobin0715    时间: 2020-12-7 14:01

回复 5# terse
第二个for不用也可以啊。
  1. @echo off&setlocal enabledelayedexpansion
  2. md 1,2,3,4 >nul 2>nul
  3. for /l %%i in (1,1,400) do (
  4.      set /a "n=(%%i-1)/4%%4+1"
  5.      set /a "_!n!+=1"
  6.      set /a str=_!n!
  7.      move "%%i.txt" "!n!\!str!.txt"
  8. )
  9. pause
复制代码

作者: laolou01    时间: 2020-12-23 16:09

回复 5# terse


    12  3  64  姜国.JPG                      12364 王天.JPG                                165         天天.txt                   空格有的1格有的2格3格  文件有JPG有TXT的      如何批量去除掉他们的空格    有的是数字间有空格  也有数字和文字间的空格    改好的最终显示为12364姜国.JPG     12364王天.JPG    165天天.txt求大神给个代码
作者: terse    时间: 2020-12-23 17:06

显示正确的话 去掉代码第五行的echo,
  1. @echo off&setlocal enabledelayedexpansion
  2. set ext=*.txt *.jpg
  3. for /f "delims=" %%i in ('dir /b /a-d %ext%') do (
  4.      set filename=%%i
  5.      echo,ren "%%i" "!filename: =!"
  6. )
  7. pause
复制代码

作者: laolou01    时间: 2020-12-23 19:00

回复 9# terse


  哥哥  这个能帮忙看看吗     12  3  64X  姜国.JPG                      12364 王天.JPG                                165         天天.txt                   空格有的1格有的2格3格  文件有JPG有TXT的      如何批量去除掉他们的空格    有的是数字间有空格  也有数字和文字间的空格    改好的最终显示为12364X姜国.JPG     12364王天.JPG    165天天.txt求大神给个代码
作者: terse    时间: 2020-12-23 20:57

本帖最后由 terse 于 2020-12-23 22:22 编辑
回复  terse


  哥哥  这个能帮忙看看吗     12  3  64X  姜国.JPG                      12364 王天 ...
laolou01 发表于 2020-12-23 19:00

没明白你的意思,九楼代码不行吗
加一行代码应该可行了
  1. @echo off&setlocal enabledelayedexpansion
  2. set ext=*.txt *.jpg
  3. for /f "delims=" %%i in ('dir /b /a-d %ext%') do (
  4.      set "filename=%%i"
  5.      set "filename=!filename: =!"
  6.      echo;ren "%%i" "!filename: =!"
  7. )
  8. pause
复制代码





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