[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
我有两个版本。第一个:
  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do set/a n+=1
  3. for /f "delims=" %%i in (a.txt) do (
  4.   for /l %%j in (1,1,%n%) do if %%~ni equ %%j set .%%j=ok
  5. )
  6. for /f "delims=" %%i in (a.txt) do (
  7.   if not defined .%%~ni call :out %%i
  8. )
  9. pause
  10. :out
  11. for /l %%i in (1,1,%n%) do (if not defined .%%i (ren %1 %%i.jpg&set .%%i=ok&goto :eof))
复制代码
第二个更简单:
  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do set/a n+=1
  3. for /f "delims=" %%i in (a.txt) do call :out %%i
  4. pause
  5. :out
  6. for /l %%i in (1,1,%n%) do (ren %1 %%i.jpg 2>nul&&goto :eof)
复制代码

TOP

暂时没想出很简洁的方法,再思考思考..........

TOP

再来一个,效率要比前两个要好:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%i in (a.txt) do (set/a n+=1&set .!n!=ok)
  3. for /f %%i in (a.txt) do (
  4.   if not defined .%%~ni (set/a n1+=1&set name!n1!=%%i
  5.   ) else (set .%%~ni=)
  6. )
  7. for /l %%i in (1,1,%n%) do (if defined .%%i (set/a n2+=1&set num!n2!=%%i))
  8. for /l %%i in (1,1,%n1%) do ren !name%%i! !num%%i!.jpg
复制代码

TOP

10楼测试过,代码虽然多,但都是for和if,不过也只能说比前面的快点。测试了几次,平均耗时0.03秒。
思路是将a.txt中 范围数字 之外的名称装进一个数组,再将剩余a.txt中没用过的数字装进一个数组,再一一对应重命名。

[ 本帖最后由 wankoilz 于 2008-6-10 23:32 编辑 ]

TOP

测试1000个文件用了2.8秒,10000个不敢测试了。发现太多的set很耗时间........
再思考思考................

[ 本帖最后由 wankoilz 于 2008-6-11 00:32 编辑 ]

TOP

仍然没想出更高效率的方法,哪怕是直接ren 10000个文件,都要不少时间吧,难道还有批量命名的什么命令么................

TOP

我也再来一个。效率不如18楼,同样情况下测试2000个文件(1000个是范围内数字,1000个是字母),18楼的平均用3.4秒,我的用4秒半。但如果数字名称的文件很多的话,我的就比较有优势了,呵呵..
  1. @echo off
  2. for /f %%i in (a.txt) do (set/a max+=1)
  3. for /f %%i in (a.txt) do (
  4. call :out %%i
  5. )
  6. pause
  7. :out
  8. if %1 leq %max% goto :eof
  9. set /a n+=1
  10. if exist %n%.jpg (goto :out
  11. ) else (ren %1 %n%.jpg)
复制代码

[ 本帖最后由 wankoilz 于 2008-6-15 20:18 编辑 ]
1

评分人数

TOP

我的有错误,改正了,不过以前的测试文件比较规则,所以可以运行。思路是和more的一样。

TOP

返回列表