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

[文件操作] 图片批量重命名的批处理为何把某些图片重复改名?

[已解决]下面是本人仿编的一段“批量改图片文件名”的代码,发现有一点小问题,恳请各位指正!!
    @echo off
    set num=0
    for %%i in (*.jpg) do call :rn "%%i"
    echo 成功!
    pause
    :rn
        set fn=%~1
        set /a num+=1
        ren %1 img%num%.jpg

[ 本帖最后由 tv5188 于 2010-4-28 07:33 编辑 ]

你设置这个变量fn在后面语句中没有用的嘛,%1是"*.jpg",%fn%才是*.jpg,而且in后的空格也少了
  1. @echo off
  2. set num=0
  3. for %%i in (*.jpg) do call :rn "%%i"
  4. echo 成功!
  5. pause
  6. :rn
  7. set fn=%~1
  8. set /a num+=1
  9. ren %fn% img%num%.jpg
复制代码

[ 本帖最后由 sgaizxt001 于 2010-4-26 08:51 编辑 ]

TOP

回复 2楼 的帖子

谢谢!!fn确实没用,%1是接受的参数,用它没有问题。
我出的问题是,改名到最后一个都没问题,当完成时“img1.jpg”又被改了,然后才完成。也就是说for多循环了一次才完!

TOP

  1. @echo off
  2. set num=0
  3. for /f "delims=" %%a in ('dir /a:-d /b *.jpg') do (
  4.     set fn="%%a"
  5.     set /a num += 1
  6.     SetLocal EnableDelayedExpansion
  7.     ren !fn! img!num!.jpg
  8.     EndLocal
  9. )
  10. echo 成功!
  11. pause
复制代码

TOP

没有多循环啊,我检测时,把off改为on,我的文件夹里有两张图片,我就只看到了两个ren命令,没有3个
努力学习,努力挣分

TOP

回复 4楼 的帖子

谢谢!这段代码没试过,不过感觉是对的,因为do ( ),我原先仿的就是这样的,只不过是批量去掉空格。只是我仿编的出的问题的机制还是不明白!

TOP

重命名不能用 for %%a in (*.jpg) ...,这个命令会使一些文件被重复命名。

错误代码:
  1. @echo off
  2. set num=0
  3. for %%a in (*.jpg) do (
  4.     set fn="%%a"
  5.     set /a num += 1
  6.     SetLocal EnableDelayedExpansion
  7.     echo %%a → img!num!.jpg
  8.     ren !fn! img!num!.jpg
  9.     EndLocal
  10. )
  11. echo 成功!
  12. pause
复制代码


用以上代码测试两张图片 "1.jpg" 和 "1 2.jpg",会发现重命名过程是:
1.jpg → img1.jpg
1 2.jpg → img2.jpg
img2.jpg → img3.jpg

[ 本帖最后由 ___ 于 2010-4-26 09:48 编辑 ]

TOP

回复 5楼 的帖子

我在win7下处理5张图片时,没错。当较多时,如50张时,运行批处理后,没有img1.jpg,再运行有img1.jpg 但少了另一个(如img17.jpg,当然总的图片数没错)。再运行,缺的那一个又变了。(win7环境)

TOP

回复 7楼 的帖子

强!有道理,学习了,看来还是要用'dir',只是我那段代码问题出在哪里呢?

TOP

回复 9楼 的帖子

就是 7 楼说的,不能用 for %%a。

TOP

回复 10楼 的帖子

本帖的核心问题是:在利用CALL语句时,FOR好像多循环了一次。

TOP

看似简单的批量重命名事实上包含着非常多的细节问题。
做到“完美”并不容易
强势围观~

TOP

返回列表