本帖最后由 WHY 于 2022-11-8 16:15 编辑
今天休息,对楼上几个脚本进行了一番性能测试。
1.测试环境
CPU:AMD A8-9600 3.10 GHz
内存:12.0 GB
硬盘:西数240G固态 + 西数1T机械
系统:Win10中文专业版 21H2 19044.2130
2.测试数据
下面脚本保存到 E:\Test\测试.bat,(E盘为机械硬盘)生成测试数据(3万个文件)- @echo off
- for %%i in (Test1 Test2 Test3 Test4) do (
- md %%i 2>nul
- for %%j in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
- for %%k in (txt prt pro drw asm mfg frm sec) do (
- for /L %%x in (1 11 400) do (
- echo;%%j.%%k.%%x > "%%i\%%j.%%k.%%x"
- )
- )
- )
- )
- pause
复制代码 3.测试方法
a.关闭系统杀毒软件;
b.在E:\Test目录下,分别对6、7、11、13楼脚本进行测试;
c.每个脚本测试完成,记录相应测试结果;
d.重启;
e.循环步骤a~d对6、7、11、13楼进行操作。
4.测试结果
6楼,CPU占用平均27.1% 内存占用99.4MB 磁盘使用最高1.8MB 脚本运行时间50.7s- @echo off
- echo %time%
- PowerShell -c "dir -Literal '%~dp0' -Recurse | ?{ $_ -is [IO.FileInfo] -and $_.Extension -match '^\.[1-9]\d*$' } | sort{ 1 * $_.Extension.Trim('.') } | group{ $_.FullName -replace '\.\d+$' } | forEach{ $n = $_.Count - 1; for($i=0;$i -lt $n;$i++){ del -Literal $_.Group[$i].FullName } mv -Literal $_.Group[$n].FullName -Dest ($_.Name + '.1') }"
- echo %time%
- pause
复制代码 7楼,CPU占用平均28.5% 内存占用10.6MB 磁盘使用最高2.5MB 脚本运行时间83.5s- @echo off & setlocal enabledelayedexpansion
- if "%~1" == "" (
- echo !time!
- for /f "tokens=1,3 delims=/" %%i in ('"%~f0" ARG ^| sort') do (
- if /i "%%i" == "!f!" (
- del "!f!!e!"
- ) else if defined f (
- for /f "delims=" %%k in ("!f!") do ren "!f!!e!" "%%~nxk.1"
- )
- set "f=%%i"
- set "e=%%j"
- )
- if defined f (
- for /f "delims=" %%k in ("!f!") do ren "!f!!e!" "%%~nxk.1"
- )
- echo !time!
- pause & exit
- ) else (
- for /f "delims=" %%i in ('dir /b /a-d /s ^| findstr "\.[1-9][0-9]*$"') do (
- for /f "delims=." %%j in ("%%~xi") do set "s=0000000000%%j"
- echo;%%~dpni/!s:~-10!/%%~xi
- )
- )
复制代码 11楼,CPU占用平均22.6% 内存占用92.3MB 磁盘使用最高2.2MB 脚本运行时间139.1s- @echo off
- echo %time%
- PowerShell "ls -Literal '%~dp0' -r|?{!$_.PsIsContainer -and $_.Extension -match '\.\d+$'}|sort @{e={ $_.Extension.Trim('.') -as [int]}}|%%{mv -Literal $_.FullName -dest ($_.DirectoryName+'\'+$_.BaseName+'.1') -Force;}"
- echo %time%
- pause
复制代码 13楼,CPU占用平均28.5% 内存占用103.4MB 磁盘使用最高2.8MB 脚本运行时间32.7s- $t = get-Date;
- $path = $MyInvocation.MyCommand.Path -replace '\\[^\\]+$'; #当前脚本目录
- $hash = @{};
- $max = @{};
-
- $files = dir -Literal $path -Recurse | ?{ $_ -is [IO.FileInfo] -and $_.Extension -match '^\.[1-9]\d*$' }
- $count = $files.Count;
-
- for( $i = 0; $i -lt $count; $i++ ){
- $key = $files[$i].DirectoryName + '\' + $files[$i].BaseName;
- $ext = 1 * $files[$i].Extension.Trim('.');
- if( $hash[$key] -isNot [Collections.ArrayList] ){
- $hash[$key] = [Collections.ArrayList]@();
- }
- [void]$hash[$key].Add( $files[$i].FullName ); #文件全名加入HashTable
- if( $max[$key] -lt $ext ){ $max[$key] = $ext; } #最大版本号
- }
-
- forEach( $key In $hash.Keys ){
- $maxFile = $key + '.' + $max[$key]; #最大版本号文件
- if( $hash[$key].Count - 1 ){
- $hash[$key].Remove( $maxFile ); #从数组移除
- Remove-Item -Literal $hash[$key]; #删除文件
- }
- Move-Item -Literal $maxFile -Dest ( $key + '.1' ); #移动(改名)
- }
- ((get-Date) - $t).Totalseconds
- [Console]::ReadLine();
复制代码 有兴趣可以亲自试一下。 |