[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
呵呵,楼上是想简单了。
假设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

仍然没想出更高效率的方法,哪怕是直接ren 10000个文件,都要不少时间吧,难道还有批量命名的什么命令么................

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (a.txt) do (
  4. set /a n+=1
  5. (ren !n!.jpg _!n!.jpg
  6. ren _%%i !n!.jpg||(ren %%i !n!.jpg)) 2>nul
  7. )
复制代码
如果文件名只含有中英数三种字符的话,这样就可以了吧。
1

评分人数

静水流深...

TOP

18 楼

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

TOP

我也再来一个。效率不如18楼,同样情况下测试2000个文件(1000个是范围内数字,1000个是字母),18楼的平均用3.4秒,我的用4秒半。但如果数字名称的文件很多的话,我的就比较有优势了,呵呵..
  1. @echo off
  2. for /f %%i in (a.txt) do (set/a max+=1)
  3. for /f %%i in (a.txt) do (
  4. call :out %%i
  5. )
  6. pause
  7. :out
  8. if %1 leq %max% goto :eof
  9. set /a n+=1
  10. if exist %n%.jpg (goto :out
  11. ) else (ren %1 %n%.jpg)
复制代码

[ 本帖最后由 wankoilz 于 2008-6-15 20:18 编辑 ]
1

评分人数

TOP

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

TOP

个人认为5楼和18楼实现了改名的操作,但是并不以a.txt的内容作为参考(不合楼主要求),导致了文件名和原文件对不上号,不可取
20楼的代码经测试不成功,而且也不符合不得判断文件总数的要求
期待中...............

TOP

回22楼

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

TOP

回复 22楼 的帖子

用这个BAT生成JPG:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=0
  4. del /q *.jpg
  5. for /f "delims=" %%i in (a.txt) do (
  6. set /a n+=1
  7. echo !n!>%%i
  8. )
  9. pause
复制代码
这样每个JPG文件内容中都会有一个数字,是按照a.txt中文件名排列的序号。

然后执行重命名的BAT,就可以检查是否对号命名了(若是,改后文件名与该JPG里的数字相同)。

经逐一检查,5楼和18楼的都能严格按照a.txt中的文件名排序对号命名的。

[ 本帖最后由 梦想种子 于 2008-6-15 14:25 编辑 ]
静水流深...

TOP

原帖由 随风 于 2008-6-15 13:28 发表
可能我没说清楚,要求是只要把文件按数序号重命名就可以了的,不用管文件名和原文件对不对的上号,所以5楼和18楼应该是可以的。
当然最理想的应该是不需要重命名的文件就不重命名。
比如
a.jpg
5.jpg
2.jpg
...

如果是这样的话,我也可以,而且还不会把已经存在的文件(序号小于16的文件)重命名:
  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do set /a m+=1
  3. for /f "delims=" %%i in (a.txt) do call :ren_ %%i
  4. goto :eof
  5. :ren_
  6. if %~n1 leq %m% goto :eof
  7. :again
  8. set /a n+=1
  9. if exist %n%.jpg goto :again
  10. ren %1 %n%.jpg
  11. goto :eof
复制代码
用这个BAT生成JPG:复制内容到剪贴板代码:
@echo off
setlocal enabledelayedexpansion
set n=0
del /q *.jpg
for /f "delims=" %%i in (a.txt) do (
set /a n+=1
echo !n!>%%i
)
pause这样每个JPG文件内容中都会有一个数字,是按照a.txt中文件名排列的序号。

然后执行重命名的BAT,就可以检查是否对号命名了(若是,改后文件名与该JPG里的数字相同)。

经逐一检查,5楼和18楼的都能严格按照a.txt中的文件名排序对号命名的。

我测试的结果却完全不相同,你真的检查过了吗????????????

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

TOP

回 25 楼

我测试的结果却完全不相同,你真的检查过了吗????????????
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b *.jpg') do (
  4. set /p t=<%%i
  5. set /p=!t! %%~ni <nul
  6. if !t! == %%~ni (echo Yes) else echo No
  7. )
  8. pause
复制代码
本来是手工检查的,没有错。
后来再写了个BAT,检查依然无误...

我环境是WIN XP PRO + SP2
静水流深...

TOP

回26楼

我指的是文件里的内容已经改变了,运行以下代码就知道了
  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. pause
  13. ::以下为18楼的重命名代码
  14. echo.&echo 以下为18楼的代码更名后的文件及对应的内容&echo.
  15. set n=0
  16. for /f "delims=" %%i in (a.txt) do (
  17. set /a n+=1
  18. (ren !n!.jpg _!n!.jpg
  19. ren _%%i !n!.jpg||(ren %%i !n!.jpg)) 2>nul
  20. )
  21. ::以下为验证代码
  22. for /l %%a in (1 1 16) do (
  23.    set /p=%%a.jpg     <nul&type %%a.jpg
  24. )
  25. pause
复制代码

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

回复 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

回29楼

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

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

TOP

返回列表