[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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 编辑 ]
技术问题请到论坛发帖求助!

a.txt中的内容其实就是当前文件夹下的jpg文件列表。
要求将当前文件夹里的所有jpg文件以序号的形式重命名。
但只能从 a.txt 获取当前文件夹里的所有 jpg 的文件名。
以序号重命名文件,陷阱重重,但如果用dir或for等命令来获取文件名的话,获取的先后次序会有一定规律,导致有些问题不能体现出来。
技术问题请到论坛发帖求助!

TOP

呵呵,个人认为算投机。。
不过也不错,也是一个解决方法

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

TOP

呵呵,强免完成任务。
两个版本的效率都非常的低。。









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

TOP

首先:效率仍是问题。
10 楼测试过吗?


代码绕的我好晕。。。

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

TOP

见顶楼红色字部分,再试试。。。
技术问题请到论坛发帖求助!

TOP

呵呵,楼上是想简单了。
假设a.txt内容如下,也就是假设用dir得到的文件名顺序
a.jpg
1.jpg
2.jpg
你执行第一步后,把a.jpg改为1.jpg 就遇到的同名文件。

在你的例子中
ren "2.jpg" "1.jpg"
ren "1.jpg" "2.jpg"
把2改为1 第二句又把1改为了2  结果还是没有1.jpg
技术问题请到论坛发帖求助!

TOP

18 楼

这个问题还真是绕人,看了半天,好像是没问题了。
加分。。。
技术问题请到论坛发帖求助!

TOP

wankoilz 兄弟的钻研精神真是可嘉!
不错,
技术问题请到论坛发帖求助!

TOP

回22楼

可能我没说清楚,要求是只要把文件按数序号重命名就可以了的,不用管文件名和原文件对不对的上号,所以5楼和18楼应该是可以的。
当然最理想的应该是不需要重命名的文件就不重命名。
比如
a.jpg
5.jpg
2.jpg
c.jpg
其中的2.jpg就不需要重命名。
技术问题请到论坛发帖求助!

TOP

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

TOP

33楼

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

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

是啊,漏了一句。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

返回列表