[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 4# hfxiang
刚才的代码有问题,重发一下。根据一位大佬的代码修改而成,未经测试:
  1. @echo off
  2. for /d %%a in (*) do (
  3.     pushd "%%a"
  4.     for /f "delims=" %%i in ('dir /s /b /a-d') do (
  5.         set "filename=%%~ni"
  6.         setlocal enabledelayedexpansion
  7.         if not exist "%~dp0!filename!%%~xi" (
  8.             copy "%%i" "%~dp0"
  9.         ) else (
  10.             set "n=1"
  11.             call :Next "%%~xi"
  12.             copy "%%i" "%~dp0!filename!(!n!)%%~xi"
  13.         )
  14.         endlocal
  15.     )
  16.     popd
  17. )
  18. pause & exit
  19. :Next
  20. if exist "%~dp0!filename!(!n!)%~1" (
  21.     set /a n+=1
  22.     goto :Next
  23. )
复制代码

TOP

我觉得使用call跳出循环体可能在效率上会有一些损失,但你在1、2楼的代码中for循环的in中使用了'set'命令,循环体中多处使用了组合命令||和&&才是效率低下的主要原因。

TOP

本帖最后由 qixiaobin0715 于 2022-8-15 13:32 编辑

回复 8# hfxiang
搜索文件没你想象的那么慢。
单独测试了一下此语句,十万个文件瞬间完成。

TOP

回复 10# hfxiang
应当是在for循环中使用call命令的原因。见帖子:
http://bbs.bathome.net/viewthread.php?tid=4831&from=favorites
中的:
第一大条中第1小条的描述。

TOP

返回列表