[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
个人认为5楼和18楼实现了改名的操作,但是并不以a.txt的内容作为参考(不合楼主要求),导致了文件名和原文件对不上号,不可取
20楼的代码经测试不成功,而且也不符合不得判断文件总数的要求
期待中...............

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

回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

回29楼

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

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

TOP

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


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

TOP

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

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

返回列表