[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
经本人用下面的两个代码测试有了一点小发现,但还不完全...
    两个代码的区别在于生成的文件名的大小和重命名文件后所形成的文件名的大小
    下面就说说我的分析吧:
    运行代码1形成的文件为123456789.dst,重命名后变成3456789.dst,由于for还要按顺序进

行文件的查找,这样会再找到重命名后的3456789.dst,这样会再把3456789.dst命名为

56789.dst,但是为什么不再把56789.dst重命名,本人无解,期待高手...
    运行代码2形成的文件为341256789.dst,重命名后变成1256789.dst,由于for是按顺序进行

查找的,先前已经从以3开头的文件开始找了,重命名后的文件12356789.dst的开头1已经比3小,

所以批处理结束.
    以上是本人的一点愚见,如有不足,请各位指正,补充...
代码1:
  1. :@echo off
  2. del *.dst >nul 2>nul
  3. cd.>123456789.dst
  4. setlocal enabledelayedexpansion
  5. for %%a in (*.dst) do (
  6.   echo %%a
  7.   set "name=%%a"
  8.   ren "%%a" "!name:~2!"
  9. )
  10. pause
复制代码
代码2:
  1. :@echo off
  2. del *.dst >nul 2>nul
  3. cd.>341256789.dst
  4. setlocal enabledelayedexpansion
  5. for %%a in (*.dst) do (
  6.   echo %%a
  7.   set "name=%%a"
  8.   ren "%%a" "!name:~2!"
  9. )
  10. pause
复制代码

TOP

再用下面的代码进行测试,本以为会对一个文件进行多次重命名的,但只对第一个被重命名的文件进行了两次处理,其它的都只重命名了一次,也许正如6楼说的是for的一个bug吧...
  1. del *.dst >nul 2>nul
  2. set "str=123456789abcdefg"
  3. :agn
  4. cd.>%str%.dst
  5. set /a n+=1
  6. if "%n%"=="10" goto :ren_
  7. set "str=%str:~1%%str:~,1%"
  8. goto :agn
  9. :ren_
  10. for %%a in (*.dst) do (
  11.   echo %%a
  12.   set "name=%%a"
  13.   setlocal enabledelayedexpansion
  14.   ren "%%a" "!name:~2!"
  15.   endlocal
  16. )
  17. pause
复制代码

TOP

返回列表