|
|
发表于 2024-4-14 18:54:34
|
显示全部楼层
本帖最后由 aloha20200628 于 2024-4-14 19:04 编辑
用本帖到目前为止的3种典型的call方法(代码如下)再跑了几遍测试样本,与30楼所列方法1-3测试数据合并,能有一个更全面的结论...致谢30楼和36楼
- ::方法4
- set "n="&for /d /r %%d in (*) do (
- set "k=" &(call :x4 "%%~d" k)
- if not defined k set/a "n+=1"
- )
- echo,发现 %n% 个末级目录&pause&exit/b
- :x4
- for /d /r "%~1" %%d in (*) do (set "%~2=1"&exit/b)
- exit/b
复制代码
- ::方法5
- set "n="&for /d /r %%d in (*) do (
- set "k=" &(call :x5 "%%~d" k)
- if not defined k set/a "n+=1"
- )
- echo,发现 %n% 个末级目录&pause&exit/b
- :x5
- for /d %%d in ("%~1\*") do (set "%~2=1"&exit/b)
- exit/b
复制代码
- ::方法6
- set "n="&(call :x6 "%cd%")
- echo,发现 %n% 个末级目录&pause&exit/b
- :x6
- for /d %%d in ("%~1\*") do (set "d=%%d"&call :x6 "%%d")
- if defined d (set /a n+=1)
- set "d="&exit/b
复制代码 方法1-6测试数据合并如下
测试主目录及其文件和子目录体量 方法1耗时/方法2耗时/方法3耗时/方法4耗时/方法5耗时/方法6耗时(耗时单位=秒)
c:\a1 148,814 个文件,32,751 个文件夹 255/275/783/1239/1149/741
c:\a2 30,262 个文件, 3,281 个文件夹 21/24/26/14/14/4
c:\a3 28,159 个文件, 2,114 个文件夹 13/15/15/6/6/2
c:\a4 16,916 个文件, 1,213 个文件夹 8/9/8/2/2/1
可见方法6采用了递归调用,没有方法4-5代码中宿主循环开销,效率倍增,但依然会在a1-a2样本之间遭遇 ‘拐点爆胎’,被方法1-2赶超...
另一点是如36楼所说会遗漏那些受保护(如隐藏)目录...
》以上仅供参考,有兴趣者还可参考以下老帖,融合体会一下call先生的功与过...
一。批处理之家 » BAT教程&资料 » 讨论:批处理运行效率浅谈
二。http://bbs.bathome.net/thread-4482-1-1.html
|
评分
-
查看全部评分
|