Board logo

标题: [文件操作] 【已解决】批处理如何按资源管理器的文件名递增的排序重命名文件 [打印本页]

作者: 001011    时间: 2015-3-14 16:20     标题: 【已解决】批处理如何按资源管理器的文件名递增的排序重命名文件

利用此代码对文件夹下的图片做重命名处理  但是顺序出现问题  麻烦各位老师帮忙纠正一下  选项
代码:
  1. @echo off & setlocal enabledelayedexpansion
  2. pushd "G:\未标记\0004\002\"
  3. for /f "delims=" %%i in ('dir/b/s *.jpg') do (
  4.     set str=%%~dpi&set str2=%%~nxi
  5.     setlocal enabledelayedexpansion
  6.     if not "!str!"=="!num!" (
  7.         set "n=10001"
  8.         ren "!str!*.jpg" "*.*.jpg"
  9.     ) else set /a n+=1
  10.     ren "!str!!str2!.jpg" "!n!.jpg"
  11.     for %%a in (!n!) do endlocal&set n=%%a
  12.     set "num=%%~dpi"
  13. )
  14. pause
复制代码
图片文件名格式

图中 红色部分 为什么在命名后跑到后面去了
作者: DAIC    时间: 2015-3-14 17:17

截图是改名之前的还是改名之后的?
改名的规律是什么?
作者: 001011    时间: 2015-3-14 17:18

截图是改名之前的还是改名之后的?
改名的规律是什么?
DAIC 发表于 2015-3-14 17:17

截图是改名之前
作者: tigerpower    时间: 2015-3-16 15:21

本帖最后由 tigerpower 于 2015-7-4 07:31 编辑

dir默认ASCII排序,非数字大小排序
作者: 001011    时间: 2015-3-17 22:42

回复 4# tigerpower
非常感谢  完美的解决了我的问题
作者: CrLf    时间: 2015-3-18 00:16

本帖最后由 CrLf 于 2015-3-18 00:30 编辑
  1. 1>1/* :
  2. @echo off
  3. pushd "G:\未标记\0004\002\"
  4. for /f "delims=" %%i in ('dir/b/s *.jpg ^| cscript -nologo -e:jscript "%~0" \d+') do (
  5.    echo %%i
  6.    rem 这里以输出为例,爱咋咋
  7. )
  8. pause & eixt /b */
  9. var re_match = new RegExp(WSH.Arguments(0)+'|.','g')
  10. var re_test = new RegExp(WSH.Arguments(0),'g')
  11. var text = WScript.StdIn.ReadAll().split(/[\r\n]+/)
  12. for(var i=0;i<text.length;i++){
  13. var match = text[i].replace(/.*[\\\/]/,'').match(re_match)
  14. if(match){
  15. for(var j=0;j<match.length;j++)
  16. match[j] = re_test.test(match[j])?1*match[j]:match[j]
  17. }
  18. text[i] = {string:text[i],array:match?match:[]}
  19. }
  20. text = text.sort(function(a,b){
  21. maxlength = Math.max(a.array.length,b.array.length)
  22. for(var i=0;i<maxlength;i++){
  23. if(a.array[i]<b.array[i])return -1
  24. if(a.array[i]>b.array[i])return 1
  25. }
  26. return a.array.length-b.array.length
  27. })
  28. Object.prototype.toString=function(){return this.string}
  29. WSH.Echo(text.join('\r\n'))
复制代码

作者: CrLf    时间: 2015-3-18 00:19

本帖最后由 CrLf 于 2015-3-20 22:18 编辑

也可以用高版本 gnu sort 的 -V 开关
  1. <!-- :
  2. @echo off
  3. pushd "G:\未标记\0004\002\"
  4. mshta "%~f0"
  5. for /f "delims=" %%i in ('dir/b/s *.jpg ^| sort -V') do (
  6.    echo %%i
  7.    rem 这里以输出为例,爱咋咋
  8. )
  9. pause & exit /b
  10. -->
  11. <script src=http://www.bathome.net/lib/diy/Tools.js></script>
  12. <script>
  13. Tools.get('7.6/sort')
  14. close()
  15. </script>
复制代码

作者: CrLf    时间: 2015-3-18 00:29

或用 naturalSort 库:
  1. <!-- :
  2. @echo off
  3. pushd "G:\未标记\0004\002\"
  4. for /f "delims=" %%i in ('dir/b/s *^|mshta "%~f0"') do (
  5.    echo %%i
  6.    rem 这里以输出为例,爱咋咋
  7. )
  8. pause & exit /b
  9. -->
  10. <script src=http://www.bathome.net/lib/diy/hide.js></script>
  11. <script src=http://www.bathome.net/lib/diy/WSH.js></script>
  12. <script src=http://www.bathome.net/lib/naturalSort.js></script>
  13. <script>
  14. var text =WSH.StdIn.ReadAll()
  15. var arr = text.split(/\r?\n/)
  16. arr = arr.sort(naturalSort)
  17. WSH.Echo(arr.join('\r\n'))
  18. </script>
复制代码

作者: 001011    时间: 2015-3-20 00:00

或用 naturalSort 库:
CrLf 发表于 2015-3-18 00:29

谢谢
您的几段代码我都试了的   没有效果   您的代码咋用啊
作者: CrLf    时间: 2015-3-20 00:05

回复 9# 001011


    存成 bat
作者: 523066680    时间: 2015-3-20 11:25

回复 10# CrLf


   
作者: 001011    时间: 2015-3-20 22:16

我是存成bat了啊  运行后没有什么效果啊
作者: CrLf    时间: 2015-3-20 22:29

回复 12# 001011


    代码仅示例排序,其中有一句 “rem 这里以输出为例,爱咋咋”,你用自己的代码把它替掉就行
作者: tracepro    时间: 2016-11-23 13:41

回复 12# 001011


   请问楼主最后是怎么解决这个问题的啊?




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