标题: [文件操作] 【已解决】求一批处理,统计扩展名出现次数最多 [打印本页]
作者: hakd 时间: 2015-6-10 17:43 标题: 【已解决】求一批处理,统计扩展名出现次数最多
本帖最后由 hakd 于 2015-6-11 11:16 编辑
写一简洁的BAT,可以实现统计当前文件夹内同一文件类型(扩展名相同即可)出现最多的,并输出其扩展名以及出现的次数。这里需要考虑如果有多类扩展名搜索及出现次数都相同的情况下都输出。要求,代码简洁高效,最好有简单的注释,过程和结果最好不涉及文件输出。
作者: pcl_test 时间: 2015-6-10 18:34
- @echo off & setlocal enabledelayedexpansion
- set n=0
- for %%a in (*) do set /a #%%~xa+=1
- for /f "tokens=2 delims==" %%b in ('set #') do if %%b geq !n! set n=%%b
- set #|find "=%n%"
- pause
复制代码
作者: CrLf 时间: 2015-6-10 18:35
powershell- dir |group Extension|sort count -des
复制代码
bat+mshta- <!-- :
- @echo off
- mshta "%~f0" | more
- pause & exit
- -->
-
- <script src=http://www.bathome.net/lib/diy/hide.js></script>
- <script src=http://www.bathome.net/lib/Prototype.js></script>
- <script src=http://www.bathome.net/lib/diy/WSH.js></script>
- <script src=http://www.bathome.net/lib/diy/Function.js></script>
- <script src=http://www.bathome.net/lib/diy/DIYprototype.js></script>
-
- <script>
- var map = {}
-
- dir().files()
- ._EACH(ret('$0.replace(/.*\\./gm,"")'))
- ._each(ret('map[$0]=map[$0]?map[$0]+1:1'))
-
- var arr = array(map).sort(ret('values($1)-values($0)'))
-
- echo(arr)
- </script>
复制代码
作者: CrLf 时间: 2015-6-10 19:48
本帖最后由 CrLf 于 2015-6-11 15:28 编辑
回复 2# pcl_test
有漏洞,不能判断是否以 %n% 结束
作者: bailong360 时间: 2015-6-10 20:07
- @echo off
- for %%a in (*) do set /a #%%~xa+=1
- set #|sort -r -n -k 2 -t =
- pause
复制代码
linux sort
作者: hakd 时间: 2015-6-11 01:34
回复 2# pcl_test
我想知道如何分别拿到扩展名变量和数量,我以后可能要用到这个变量?
作者: pcl_test 时间: 2015-6-11 09:48
回复 4# CrLf
结束?何意,请指正
作者: hakd 时间: 2015-6-11 10:53
回复 7# pcl_test
我想知道如何分别拿到扩展名变量和数量,我以后可能要用到这个变量?
作者: pcl_test 时间: 2015-6-11 11:11
回复 9# hakd
套进for里提取- for /f "tokens=1,2 delims=#=" %%a in ('set #^|find "=%n%"') do echo,%%a %%b
复制代码
作者: hakd 时间: 2015-6-11 11:16
回复 10# pcl_test
非常感谢您。同时也非常感谢其它热心人的帮助。
作者: apang 时间: 2015-6-11 11:27
回复 7# pcl_test
CrLf兄台的意思是,比如最大数n=21,find会把扩展名个数为2的条目也列出来
作者: apang 时间: 2015-6-11 11:28
- @echo off & setlocal enabledelayedexpansion
- set "Max=1"
- for %%a in (*) do (
- set /a #%%~xa+=1
- if !#%%~xa! GTR !Max! set "Max=!#%%~xa!"
- )
- set #|findstr "=%Max%$"
- pause
复制代码
作者: xxpinqz 时间: 2015-6-11 11:46
- @echo off & setlocal enabledelayedexpansion
- for %%a in (*) do set /a #%%~xa+=1&if !#%%~xa! geq !n! set "n=!#%%~xa!"
- for /f "delims==" %%a in ('set #^|find "=%n%"')do echo 后续引用时的变量名称写法%%a,调用统计值的写法%%%%a%%.
- pause
复制代码
寻找最大值,所以=%n%,这写法应该没漏洞吧。。。
作者: apang 时间: 2015-6-11 12:55
12#我搞错了,二楼 pcl_test 是正确的,抱歉!
假设n最大值是21,find "=%n%" 能取到扩展名个数为21或211的行。但211不可能出现,因为21最大。
作者: CrLf 时间: 2015-6-11 14:56
回复 7# pcl_test
哦,没有,忘了这已经是最大值了,请忽略4楼的话
作者: CrLf 时间: 2015-6-11 15:45
借助第三方来一个- dir /a-d /b | sed.exe "/\./!s/.*//;s/.*\././" | sort | uniq -c |sort /r
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |