在E:\下有一个文件夹:E:\测试照片批量重命名,在这个文件夹下存放着一个照片文件夹:E:\测试照片批量重命名\0,一个存入学生信息的EXCEL数据表另存而得的以制表符分隔的文本文件:E:\测试照片批量重命名\3.txt。
现在我想从3.txt文件中跳过前面6行提取第二列的数据:学生姓名,把E:\测试照片批量重命名\0 文件夹下的照片名批量以学生姓名重新命名。
因为是测试,所以我把文件夹里的照片和学生信息表中的数据都只保留了8个学生的信息。我的代码是这样的:
1、第一次测试:- echo on
- setlocal enabledelayedexpansion
- for /f "delims=U" %%a in ('cmd /u/c echo 唉') do set "tab=%%a"
- if exist a.txt del a.txt
- if exist b.bat del b.bat
- cd /d "E:\测试照片批量重命名\0"
- dir /b/od>"E:\测试照片批量重命名\a.txt"
- for /f "skip=6 tokens=2 delims=%tab%" %%i in ('type "E:\测试照片批量重命名\3.txt"') do (
- for /f "tokens=1 delims=" %%b in (E:\测试照片批量重命名\a.txt) do echo ren "%%b" "%%i.jpg">>"E:\测试照片批量重命名\b.bat")
复制代码 运行后,在b.bat中得到的结果怎么会是下面这样呢?每一个学生的名字为什么会重复出现与每一张照片名对应呢?然后每一张照片再重复也每一个学生的名字对应一次,也就是%%i的第一个值会重复出现与%%b的每一个值对应一次,然后%%i的第二个值再重复出现与%%b的每一个值对应一次,然后是%%i的第三个值重复出现与%%b的每一个值对应,一直这样直到%%i的最后一个值。
ren "DSC01820.JPG" "张灿.jpg"
ren "DSC01821.JPG" "张灿.jpg"
ren "DSC01822.JPG" "张灿.jpg"
ren "DSC01823.JPG" "张灿.jpg"
ren "DSC01824.JPG" "张灿.jpg"
ren "DSC01825.JPG" "张灿.jpg"
ren "DSC01826.JPG" "张灿.jpg"
ren "DSC01827.JPG" "张灿.jpg"
ren "DSC01820.JPG" "王宇.jpg"
ren "DSC01821.JPG" "王宇.jpg"
ren "DSC01822.JPG" "王宇.jpg"
ren "DSC01823.JPG" "王宇.jpg"
ren "DSC01824.JPG" "王宇.jpg"
ren "DSC01825.JPG" "王宇.jpg"
ren "DSC01826.JPG" "王宇.jpg"
ren "DSC01827.JPG" "王宇.jpg"
ren "DSC01820.JPG" "李俊辉.jpg"
ren "DSC01821.JPG" "李俊辉.jpg"
ren "DSC01822.JPG" "李俊辉.jpg"
ren "DSC01823.JPG" "李俊辉.jpg"
ren "DSC01824.JPG" "李俊辉.jpg"
ren "DSC01825.JPG" "李俊辉.jpg"
ren "DSC01826.JPG" "李俊辉.jpg"
ren "DSC01827.JPG" "李俊辉.jpg"
ren "DSC01820.JPG" "谢李洋.jpg"
ren "DSC01821.JPG" "谢李洋.jpg"
ren "DSC01822.JPG" "谢李洋.jpg"
ren "DSC01823.JPG" "谢李洋.jpg"
ren "DSC01824.JPG" "谢李洋.jpg"
ren "DSC01825.JPG" "谢李洋.jpg"
ren "DSC01826.JPG" "谢李洋.jpg"
ren "DSC01827.JPG" "谢李洋.jpg"
ren "DSC01820.JPG" "江豪.jpg"
ren "DSC01821.JPG" "江豪.jpg"
ren "DSC01822.JPG" "江豪.jpg"
ren "DSC01823.JPG" "江豪.jpg"
ren "DSC01824.JPG" "江豪.jpg"
ren "DSC01825.JPG" "江豪.jpg"
ren "DSC01826.JPG" "江豪.jpg"
ren "DSC01827.JPG" "江豪.jpg"
ren "DSC01820.JPG" "杨宣坤.jpg"
ren "DSC01821.JPG" "杨宣坤.jpg"
ren "DSC01822.JPG" "杨宣坤.jpg"
ren "DSC01823.JPG" "杨宣坤.jpg"
ren "DSC01824.JPG" "杨宣坤.jpg"
ren "DSC01825.JPG" "杨宣坤.jpg"
ren "DSC01826.JPG" "杨宣坤.jpg"
ren "DSC01827.JPG" "杨宣坤.jpg"
ren "DSC01820.JPG" "李潇.jpg"
ren "DSC01821.JPG" "李潇.jpg"
ren "DSC01822.JPG" "李潇.jpg"
ren "DSC01823.JPG" "李潇.jpg"
ren "DSC01824.JPG" "李潇.jpg"
ren "DSC01825.JPG" "李潇.jpg"
ren "DSC01826.JPG" "李潇.jpg"
ren "DSC01827.JPG" "李潇.jpg"
ren "DSC01820.JPG" "钱森.jpg"
ren "DSC01821.JPG" "钱森.jpg"
ren "DSC01822.JPG" "钱森.jpg"
ren "DSC01823.JPG" "钱森.jpg"
ren "DSC01824.JPG" "钱森.jpg"
ren "DSC01825.JPG" "钱森.jpg"
ren "DSC01826.JPG" "钱森.jpg"
ren "DSC01827.JPG" "钱森.jpg"
2、第二次测试:我又把代码作了一下修改,调换了两个for的位置:- echo on
- setlocal enabledelayedexpansion
- for /f "delims=U" %%a in ('cmd /u/c echo 唉') do set "tab=%%a"
- if exist a.txt del a.txt
- if exist b.bat del b.bat
- pause
- cd /d "E:\测试照片批量重命名\0"
- dir /b/od>"E:\测试照片批量重命名\a.txt"
- for /f "tokens=1 delims=" %%b in (E:\测试照片批量重命名\a.txt) do (
- for /f "skip=6 tokens=2 delims=%tab%" %%i in ('type "E:\测试照片批量重命名\3.txt"') do echo ren "%%b" "%%i.jpg">>"E:\测试照片批量重命名\b.bat")
复制代码 这时运行后在b.bat中得到的结果是下面这样的,是%%b的第一个值重复出现与每一个%%i的值对应一次,然后%%b的第二个值重复出现对应%%i的每一个值,直到最后一个%%b的值。结果如下:
ren "DSC01820.JPG" "张灿.jpg"
ren "DSC01820.JPG" "王宇.jpg"
ren "DSC01820.JPG" "李俊辉.jpg"
ren "DSC01820.JPG" "谢李洋.jpg"
ren "DSC01820.JPG" "江豪.jpg"
ren "DSC01820.JPG" "杨宣坤.jpg"
ren "DSC01820.JPG" "李潇.jpg"
ren "DSC01820.JPG" "钱森.jpg"
ren "DSC01821.JPG" "张灿.jpg"
ren "DSC01821.JPG" "王宇.jpg"
ren "DSC01821.JPG" "李俊辉.jpg"
ren "DSC01821.JPG" "谢李洋.jpg"
ren "DSC01821.JPG" "江豪.jpg"
ren "DSC01821.JPG" "杨宣坤.jpg"
ren "DSC01821.JPG" "李潇.jpg"
ren "DSC01821.JPG" "钱森.jpg"
ren "DSC01822.JPG" "张灿.jpg"
ren "DSC01822.JPG" "王宇.jpg"
ren "DSC01822.JPG" "李俊辉.jpg"
ren "DSC01822.JPG" "谢李洋.jpg"
ren "DSC01822.JPG" "江豪.jpg"
ren "DSC01822.JPG" "杨宣坤.jpg"
ren "DSC01822.JPG" "李潇.jpg"
ren "DSC01822.JPG" "钱森.jpg"
ren "DSC01823.JPG" "张灿.jpg"
ren "DSC01823.JPG" "王宇.jpg"
ren "DSC01823.JPG" "李俊辉.jpg"
ren "DSC01823.JPG" "谢李洋.jpg"
ren "DSC01823.JPG" "江豪.jpg"
ren "DSC01823.JPG" "杨宣坤.jpg"
ren "DSC01823.JPG" "李潇.jpg"
ren "DSC01823.JPG" "钱森.jpg"
ren "DSC01824.JPG" "张灿.jpg"
ren "DSC01824.JPG" "王宇.jpg"
ren "DSC01824.JPG" "李俊辉.jpg"
ren "DSC01824.JPG" "谢李洋.jpg"
ren "DSC01824.JPG" "江豪.jpg"
ren "DSC01824.JPG" "杨宣坤.jpg"
ren "DSC01824.JPG" "李潇.jpg"
ren "DSC01824.JPG" "钱森.jpg"
ren "DSC01825.JPG" "张灿.jpg"
ren "DSC01825.JPG" "王宇.jpg"
ren "DSC01825.JPG" "李俊辉.jpg"
ren "DSC01825.JPG" "谢李洋.jpg"
ren "DSC01825.JPG" "江豪.jpg"
ren "DSC01825.JPG" "杨宣坤.jpg"
ren "DSC01825.JPG" "李潇.jpg"
ren "DSC01825.JPG" "钱森.jpg"
ren "DSC01826.JPG" "张灿.jpg"
ren "DSC01826.JPG" "王宇.jpg"
ren "DSC01826.JPG" "李俊辉.jpg"
ren "DSC01826.JPG" "谢李洋.jpg"
ren "DSC01826.JPG" "江豪.jpg"
ren "DSC01826.JPG" "杨宣坤.jpg"
ren "DSC01826.JPG" "李潇.jpg"
ren "DSC01826.JPG" "钱森.jpg"
ren "DSC01827.JPG" "张灿.jpg"
ren "DSC01827.JPG" "王宇.jpg"
ren "DSC01827.JPG" "李俊辉.jpg"
ren "DSC01827.JPG" "谢李洋.jpg"
ren "DSC01827.JPG" "江豪.jpg"
ren "DSC01827.JPG" "杨宣坤.jpg"
ren "DSC01827.JPG" "李潇.jpg"
ren "DSC01827.JPG" "钱森.jpg"
请高手帮忙分析一下,为什么会出现这样的情况呢?为什么第一个for的变量的值会重复出现呢?两个for的变量值为什么不同步呢?
3、第三次测试:在一位热心网友的帮助下,帮我修改了一下代码,运行后在b.bat文件中能得到正确结果,没有重复,但是在CMD窗口中同样是重复出现了每一个学生的名字与第一张照片对应,再重复出现与第二照片名对应,运行速度比较慢:代码如下:- @echo on
- setlocal enabledelayedexpansion
- for /f "delims=U" %%a in ('cmd /u/c echo 唉') do set "tab=%%a"
- if exist a.txt del a.txt
- if exist b.bat del b.bat
- pause
- cd /d "E:\测试照片批量重命名\0"
- dir /b/od>"E:\测试照片批量重命名\a.txt"
- for /f "skip=6 tokens=2 delims=%tab%" %%i in ('type "E:\测试照片批量重命名\3.txt"') do (
- set /a n+=1
- for /f "tokens=1 delims=" %%b in (E:\测试照片批量重命名\a.txt) do echo %%b>>"E:\测试照片批量重命名\b.bat")
- set /a m+=1
- if /i "!n!"=="!m!" echo ren "%%b" "%%i.jpg">>"E:\测试照片批量重命名\b.bat")
- set m=0)
复制代码 运行后,在b.bat文件中得到的语句如下:
ren "DSC01820.JPG" "张灿.jpg"
ren "DSC01821.JPG" "王宇.jpg"
ren "DSC01822.JPG" "李俊辉.jpg"
ren "DSC01823.JPG" "谢李洋.jpg"
ren "DSC01824.JPG" "江豪.jpg"
ren "DSC01825.JPG" "杨宣坤.jpg"
ren "DSC01826.JPG" "李潇.jpg"
ren "DSC01827.JPG" "钱森.jpg"
可是我用echo on以后,去看CMD窗口,里面同样重复对应过!
4、第四次测试:在一个高手的帮助下,他帮我把代码再次修改成了下面那样,这次运行速度很快,CMD窗口中没有出现重复,运行后在b.bat文件中得到了正确的结果,代码如下:- @echo on&setlocal enabledelayedexpansion
- if exist b.bat del b.bat
- for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
- cd /d "E:\测试照片批量重命名\0"
- (for /f "delims=" %%a in ('echo ##^&echo ##^&dir /b/od *.jpg') do (
- set/p fn=
- if not "%%a"=="##" (
- for /f "tokens=2 delims=%tab%" %%b in ("!fn!") do echo ren "%%a" "%%b.jpg">>"E:\测试照片批量重命名\b.bat"
- )
- ))<"E:\测试照片批量重命名\3.txt"
- pause
复制代码 这时得到了正确的结果:
ren "DSC01820.JPG" "张灿.jpg"
ren "DSC01821.JPG" "王宇.jpg"
ren "DSC01822.JPG" "李俊辉.jpg"
ren "DSC01823.JPG" "谢李洋.jpg"
ren "DSC01824.JPG" "江豪.jpg"
ren "DSC01825.JPG" "杨宣坤.jpg"
ren "DSC01826.JPG" "李潇.jpg"
ren "DSC01827.JPG" "钱森.jpg"
这一次的代码,同样是两个for循环的嵌套啊,怎么运行结果却不相同呢?请高手们帮忙解释一下。 |