方法都不错啊,效率也高
以下是我代码
::方法一、
:: 用findstr 来过滤多余的信息,代码显得更整洁易懂,但效率略低一点点。
:: 但子文件越多时速度却相对越快,因为子文件越多findstr过滤掉的内容就越多。
:: 除文件路径和含文件名的行以外,其它的多余信息都被过滤掉了。
:- @echo off&setlocal enabledelayedexpansion
- echo 按任意键开始
- pause>nul
- set t=%time%
- set 指定目录=f:\111\测试文件夹
- for /f "tokens=*" %%i in ('dir/a-d/tc/s "%指定目录%"^|findstr /b "[0-9] ..:"') do (
- for /f "tokens=1-3* delims= " %%a in ("%%i") do (
- set "str=%%i"
- if "!str:~1,1!"==":" (set ml=%%i) else (
- echo %%a !ml:~0,-4!\%%d&set /a n+=1
- )))
- echo.&echo :: 共有 !n! 个文件
- call :time0 "%t%" "%time%" "ok"
- echo :: 耗时 %ok%
- endlocal&pause>nul&exit
-
- :time0 以下为计算耗时封装部分。
- :: code 随风 @bbs.bathone.cn 2008-08-15
- setlocal&set /a n=0
- for /f "tokens=1-8 delims=.: " %%a in ("%~1:%~2") do (
- set /a n+=10%%a%%100*360000+10%%b%%100*6000+10%%c%%100*100+10%%d%%100
- set /a n-=10%%e%%100*360000+10%%f%%100*6000+10%%g%%100*100+10%%h%%100
- )
- set "n=%n:-=%"
- set /a s=n/360000,n=n%%360000,f=n/6000,n=n%%6000,m=n/100,n=n%%100
- set "ok=%s% 小时 %f% 分钟 %m% 秒 %n% 毫秒"
- endlocal&set "%~3=%ok%"&goto :eof
复制代码 ::━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
::方法二、
:: 文件不太多时速度比用findstr要快些,但区别不太大。
:- @echo off&setlocal enabledelayedexpansion
- echo 按任意键开始
- pause>nul
- set t=%time%
- set 指定目录=f:\111\测试文件夹
- for /f "skip=3 delims=" %%i in ('dir/tc/s/a-d "%指定目录%"') do (
- for /f "tokens=1-3* delims= " %%a in ("%%i") do (
- set "str=%%i"
- if "%%b"=="个文件" set "ml="
- if defined ml echo %%a !ml:~1,-4!\%%d&set /a n+=1
- if "!str:~2,1!"==":" set "ml=%%i"
- ))
- echo.&echo :: 共有 !n! 个文件
- call :time0 "%t%" "%time%" "ok"
- echo :: 耗时 %ok%
- endlocal&pause>nul&exit
-
- :time0 以下为计算耗时封装部分。
- :: code 随风 @bbs.bathone.cn 2008-08-15
- setlocal&set /a n=0
- for /f "tokens=1-8 delims=.: " %%a in ("%~1:%~2") do (
- set /a n+=10%%a%%100*360000+10%%b%%100*6000+10%%c%%100*100+10%%d%%100
- set /a n-=10%%e%%100*360000+10%%f%%100*6000+10%%g%%100*100+10%%h%%100
- )
- set "n=%n:-=%"
- set /a s=n/360000,n=n%%360000,f=n/6000,n=n%%6000,m=n/100,n=n%%100
- set "ok=%s% 小时 %f% 分钟 %m% 秒 %n% 毫秒"
- endlocal&set "%~3=%ok%"&goto :eof
复制代码
|