[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理将文件以数字重命名

讨论:将文件以数字重命名
看似简单,其实不然。
现有a.txt文件内容如下,一行一个文件名。路径为当前目录。
要求:
   1、不能改变a.txt内容的顺序
   2、将当前目录下的所有jpg文件以序号的形式重命名 如:从1-16

   3、如果有16个文件,必须重命名为1-16,不允许出现16之后的序号

暂不公布我的代码,各位不防先试试。
a.txt 内容:
  1. 2.jpg
  2. 1.jpg
  3. a.jpg
  4. 5ww.jpg
  5. c.jpg
  6. f.jpg
  7. rty.jpg
  8. 3.jpg
  9. 11.jpg
  10. b.jpg
  11. 6.jpg
  12. e.jpg
  13. 8.jpg
  14. 111.jpg
  15. 7.jpg
  16. 30.jpg
复制代码


重新描述一下要求:
当前文件夹有一万多个jpg文件,文件名没有规律,有数字,英文,中文、及中英文混合。
要求:
   将jpg文件以数字形式重命名,必须是从1开始递增,即:最大的一个文件名就是文件的总数。
   要求效率,即:不能先判断文件的总数,再重命名。


[ 本帖最后由 随风 于 2008-6-10 23:55 编辑 ]
技术问题请到论坛发帖求助!

是啊,漏了一句。else set /a n-=1
:
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do call :loop "%%a"
  3. pause
  4. :loop
  5. set /a n+=1
  6. if exist "%n%.jpg" set .%n%=a&goto loop
  7. if not defined .%~n1 (ren "%~1" "%n%.jpg"&set .%n%=a) else set /a n-=1
  8. goto :eof
复制代码
2

评分人数

技术问题请到论坛发帖求助!

TOP

经测试37楼成功,38楼不成功,原因如下:
这是a.txt的部分内容:
2.jpg
1.jpg
a.jpg
5ww.jpg
c.jpg
当call :loop 2.jpg;当n加到4的时候出错,
if exist "4.jpg" set .4=a&goto loop   ==>这句不执行
if not defined .2 ren "%~1" "4.jpg"&set .4=a    ==>这句也不执行
goto :eof    ==>一直未定义.4
所以出错

TOP

回复 38楼 的帖子

你逻辑顺序比较好,所以简短很多。
静水流深...

TOP

哈哈哈哈,37楼 和我的代码一模一样了。
哈哈。。。。
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do call :loop "%%a"
  3. pause
  4. :loop
  5. set /a n+=1
  6. if exist "%n%.jpg" set .%n%=a&goto loop
  7. if not defined .%~n1 ren "%~1" "%n%.jpg"&set .%n%=a
  8. goto :eof
复制代码
技术问题请到论坛发帖求助!

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (a.txt) do (
  4. set /a n+=1
  5. call :check "%%i"
  6. )
  7. pause&exit
  8. :check
  9. if defined %~n1 (set /a n-=1&goto :eof)
  10. if exist !n!.jpg (
  11. set !n!=OK
  12. set /a n+=1
  13. goto check
  14. ) else (
  15. ren %1 !n!.jpg
  16. )
复制代码
1

评分人数

静水流深...

TOP

哈哈,如果没有23楼的回复,我也不会贴出25楼的代码的,所以啊,正如我在22楼所说的,还没有符合题意的代码,依然在期待中........................

TOP

我的有错误,改正了,不过以前的测试文件比较规则,所以可以运行。思路是和more的一样。

TOP

33楼

呵呵。但是你的代码统计了文件总数,同样不合题意啊。
技术问题请到论坛发帖求助!

TOP

好热闹,
我来说两句。
其实我们把a.txt的内容加上行号就可以很好的说明问题了
其实 梦想种子 的意思就是以行号重命名文件,18楼的代码也确实达到如此功效。
而more的意思好像是:
 以16个文件为例
  若有2.jpg则不能重命名2.jpg ..........
    若有10.jpg则不能重命名10.jpg ..........
    .....................
个人认为这种思路是最理想的。


是的,我以为楼主的原意是这样的(虽然并不是),不过我的代码可达到了这个效果喔.

TOP

好热闹,
我来说两句。
其实我们把a.txt的内容加上行号就可以很好的说明问题了
其实 梦想种子 的意思就是以行号重命名文件,18楼的代码也确实达到如此功效。
而more的意思好像是:
 以16个文件为例
  若有2.jpg则不能重命名2.jpg ..........
    若有10.jpg则不能重命名10.jpg ..........
    .....................
个人认为这种思路是最理想的。
技术问题请到论坛发帖求助!

TOP

这肯定要变的啊...

按照a.txt的顺序:

2.jpg 要改成 1.jpg
1.jpg 要改成 2.jpg
a.jpg 要改成 3.jpg
5ww.jpg 要改成 4.jpg
....

注意,原来的2.jpg不同现在的2.jpg了,因为根据a.txt,要改成1.jpg...依此类推
所以,结果就是对的了。不是么?
静水流深...

TOP

回29楼

更名前的内容和更名后的内容已经改变啦!
                         更名前           更名后
1.jpg                    2                               1
2.jpg                    1                               2
3.jpg                    8                               3
............

[ 本帖最后由 more 于 2008-6-15 16:47 编辑 ]

TOP

回复 27楼 的帖子

我运行的结果是这个:

以下为更名前的文件及对应的内容
2.jpg     1
1.jpg     2
a.jpg     3
5ww.jpg     4
c.jpg     5
f.jpg     6
rty.jpg     7
3.jpg     8
11.jpg     9
b.jpg     10
6.jpg     11
e.jpg     12
8.jpg     13
111.jpg     14
7.jpg     15
30.jpg     16
请按任意键继续. . .

以下为18楼的代码更名后的文件及对应的内容

1.jpg     1
2.jpg     2
3.jpg     3
4.jpg     4
5.jpg     5
6.jpg     6
7.jpg     7
8.jpg     8
9.jpg     9
10.jpg     10
11.jpg     11
12.jpg     12
13.jpg     13
14.jpg     14
15.jpg     15
16.jpg     16
请按任意键继续. . .

证明18楼代码没有问题。

我再把代码换成5楼的,结果还是上面的结果。所以5楼代码没有错。
究竟是怎么回事?有没有第三个人试试?
静水流深...

TOP

下面的是我的重命名代码,作一下对比就清楚了:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. del /f/q *.jpg
  4. ::按a.txt的内容生成固定内容的.jpg文件(24楼)
  5. for /f "delims=" %%i in (a.txt) do (
  6. set /a n+=1
  7. echo !n!>%%i
  8. )
  9. ::显示.jpg文件里的内容,作验证用
  10. echo 以下为更名前的文件及对应的内容
  11. for /f "delims=" %%a in ('type a.txt') do (set/p=%%a     <nul&type %%a)
  12. set n=0
  13. echo.&echo 以下为更名后的文件及对应的内容&echo.
  14. for /f "delims=" %%i in (a.txt) do set /a m+=1
  15. for /f "delims=" %%i in (a.txt) do call :ren_ %%i
  16. goto :count_
  17. :ren_
  18. if %~n1 leq %m% goto :eof
  19. :again
  20. set /a n+=1
  21. if exist %n%.jpg goto :again
  22. ren %1 %n%.jpg
  23. goto :eof
  24. :count_
  25. for /l %%a in (1 1 16) do (
  26.    set /p=%%a.jpg     <nul&type %%a.jpg
  27. )
  28. pause
复制代码

TOP

返回列表