标题: [文件操作] 图片批量重命名的批处理为何把某些图片重复改名? [打印本页]
作者: tv5188 时间: 2010-4-26 08:09 标题: 图片批量重命名的批处理为何把某些图片重复改名?
[已解决]下面是本人仿编的一段“批量改图片文件名”的代码,发现有一点小问题,恳请各位指正!!
@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 编辑 ]
作者: sgaizxt001 时间: 2010-4-26 08:42
你设置这个变量fn在后面语句中没有用的嘛,%1是"*.jpg",%fn%才是*.jpg,而且in后的空格也少了
- @echo off
- set num=0
- for %%i in (*.jpg) do call :rn "%%i"
- echo 成功!
- pause
- :rn
- set fn=%~1
- set /a num+=1
- ren %fn% img%num%.jpg
复制代码
[ 本帖最后由 sgaizxt001 于 2010-4-26 08:51 编辑 ]
作者: tv5188 时间: 2010-4-26 09:00 标题: 回复 2楼 的帖子
谢谢!!fn确实没用,%1是接受的参数,用它没有问题。
我出的问题是,改名到最后一个都没问题,当完成时“img1.jpg”又被改了,然后才完成。也就是说for多循环了一次才完!
作者: ___ 时间: 2010-4-26 09:05
- @echo off
- set num=0
- for /f "delims=" %%a in ('dir /a:-d /b *.jpg') do (
- set fn="%%a"
- set /a num += 1
- SetLocal EnableDelayedExpansion
- ren !fn! img!num!.jpg
- EndLocal
- )
- echo 成功!
- pause
复制代码
作者: sgaizxt001 时间: 2010-4-26 09:10
没有多循环啊,我检测时,把off改为on,我的文件夹里有两张图片,我就只看到了两个ren命令,没有3个
作者: tv5188 时间: 2010-4-26 09:12 标题: 回复 4楼 的帖子
谢谢!这段代码没试过,不过感觉是对的,因为do ( ),我原先仿的就是这样的,只不过是批量去掉空格。只是我仿编的出的问题的机制还是不明白!
作者: ___ 时间: 2010-4-26 09:12
重命名不能用 for %%a in (*.jpg) ...,这个命令会使一些文件被重复命名。
错误代码:- @echo off
- set num=0
- for %%a in (*.jpg) do (
- set fn="%%a"
- set /a num += 1
- SetLocal EnableDelayedExpansion
- echo %%a → img!num!.jpg
- ren !fn! img!num!.jpg
- EndLocal
- )
- echo 成功!
- pause
复制代码
用以上代码测试两张图片 "1.jpg" 和 "1 2.jpg",会发现重命名过程是:
1.jpg → img1.jpg
1 2.jpg → img2.jpg
img2.jpg → img3.jpg
[ 本帖最后由 ___ 于 2010-4-26 09:48 编辑 ]
作者: tv5188 时间: 2010-4-26 09:17 标题: 回复 5楼 的帖子
我在win7下处理5张图片时,没错。当较多时,如50张时,运行批处理后,没有img1.jpg,再运行有img1.jpg 但少了另一个(如img17.jpg,当然总的图片数没错)。再运行,缺的那一个又变了。(win7环境)
作者: tv5188 时间: 2010-4-26 09:21 标题: 回复 7楼 的帖子
强!有道理,学习了,看来还是要用'dir',只是我那段代码问题出在哪里呢?
作者: ___ 时间: 2010-4-26 09:49 标题: 回复 9楼 的帖子
就是 7 楼说的,不能用 for %%a。
作者: tv5188 时间: 2010-4-27 07:23 标题: 回复 10楼 的帖子
本帖的核心问题是:在利用CALL语句时,FOR好像多循环了一次。
作者: 523066680 时间: 2010-4-27 09:23
看似简单的批量重命名事实上包含着非常多的细节问题。
做到“完美”并不容易
强势围观~
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |