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

回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

回 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

原帖由 随风 于 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

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

回22楼

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

TOP

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

TOP

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

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

18 楼

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

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

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

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

想给想得太简单了,呵呵……

[ 本帖最后由 lovelymorning 于 2008-6-11 16:36 编辑 ]

TOP

测试1000个文件用了2.8秒,10000个不敢测试了。发现太多的set很耗时间........
再思考思考................

[ 本帖最后由 wankoilz 于 2008-6-11 00:32 编辑 ]

TOP

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

TOP

返回列表