![Board logo](images/default/logo.gif)
标题: [文件管理] BAT枚举下一级目录大小+排序输出+可递进查询 [打印本页]
作者: 523066680 时间: 2013-8-3 22:57 标题: BAT枚举下一级目录大小+排序输出+可递进查询
本帖最后由 523066680 于 2013-8-7 09:08 编辑
转移磁盘较大文件的时候需要参考一下,就写了。
备注:
主要是为了一步步找出较大的、影响磁盘空间目录。
调整了一兆以上的数值精确度。
- ::Show Each Folder Size with Percent
- :: via 523066680, 2013-08
- ::维护记录:
- ::1、文件夹名称里存在"%"时被脱逸而导致的错误
- ::2、截取的一兆以上的Size进行*1000000/(1024*1024)
- ::3、输入open 或者open 编号,打开当前或者对应目录
-
- @echo off
- setlocal enabledelayedexpansion
- set "back= "
- for /l %%a in (1,1,8) do (
- set back=!back!!back!
- )
- echo 注:以下统计仅为数值截取的大致结果。
-
- :start
- echo 当前目录:"%cd%"
- for /f "tokens=1" %%a in ('dir /ad ^|find "个目录"') do (
- set all=%%a
- )
- if "%all%"=="2" (echo 没有子目录,返回上一层 &cd .. &goto :input)
-
- ::关键变量初始化
- set /a i=0, Si[0]=0
-
- ::逐个调用
- for /f "tokens=*" %%a in ('dir /ad /b') do (
- set TPath=%%a
- call :deal
- )
-
- call :ShowDetail
- pause
- exit
-
- :deal
- set /a i+=1, ia=i-1, ix=i*100/all
- set /p inp=!back!%ix%%% "!TPath!" <nul
-
- for /f "tokens=3" %%a in ('dir /a /-c /s "!TPath!" ^|find " 个文件"') do (
- set bytes=000000000000%%a
- set bytes=!bytes:~-12!
- set MB=%%a
- )
- if "%MB:~6%"=="" (
- set MB= ^<1
- ) else (
- set /a RealMB=!MB:~0,-6!*1000/1024*1000/1024
- set MB= !RealMB!
- )
- rem 对齐
- set MB=!MB:~-6!
-
-
- rem 插入排序
- for /l %%a in (%ia%,-1,0) do (
- set /a A2=%%a+1
- if !bytes! lss !Si[%%a]! (
- set Si[!A2!]=!Si[%%a]!
- set Sj[!A2!]=!Sj[%%a]!
- set Sk[!A2!]=!Sk[%%a]!
- ) else (
- set Si[!A2!]=!bytes!
- set Sj[!A2!]=!TPath!
- set Sk[!A2!]=!MB!
- goto :Out
- )
- )
- :Out
- goto :eof
-
- :ShowDetail
- set /p inp=%back%<nul
- for /l %%a in (1,1,%i%) do (
- echo %%a !Sk[%%a]! MB !Sj[%%a]!
- )
- echo,
- :input
- set "input="
- set /p input=进入某目录请输入对应编号(exit退出):
- if "%input%"=="exit" (exit)
- if "%input%"=="prev" (cd .. &goto :start)
- if "%input:~0,4%"=="open" (
- if "%input:~4%"=="" (
- start explorer "%cd%"
- ) else (
- if defined Sj[%input:~5%] (
- start explorer "!Sj[%input:~5%]!"
- ) else (
- echo 请输入正确的编号
- )
- )
- goto :input
- )
- if not defined Si[%input%] (
- echo 输入错误
- goto :input
- ) else (
- set next=!Sj[%input%]!
- )
- cd %next%
- goto :start
复制代码
作者: 523066680 时间: 2013-8-3 23:01 标题: Example
本帖最后由 523066680 于 2013-8-3 23:09 编辑
示例1、安装软件存储目录
22 227 MB 视频编辑和DVD刻录
23 262 MB 网络相关
24 297 MB 系统组件
25 331 MB 磁盘操作和恢复
26 567 MB 驱动
27 823 MB 手机相关
28 1193 MB Programming
29 2690 MB 编辑软件
进入某目录请输入对应编号(exit退出):29
当前目录:"D:\XSoft\编辑软件"
1 0 MB Acrobat X11 配置
2 0 MB GIMP2.8所需的dll
3 0 MB vim插件
4 793 MB office2007
示例2、F盘
31 4365 MB 软件备份
32 7372 MB Program Files
33 10639 MB virtual
34 19599 MB x
35 23159 MB 演示
进入某目录请输入对应编号(exit退出):35
当前目录:"F:\演示"
1 429 MB Samsung
2 849 MB ASTRA.HD.H.264
3 881 MB LG
4 1047 MB philips
5 1911 MB 时间风景纪录片Timescapes.2012.720p.BluRay.x264.AC3-HDChina
6 1981 MB Panasonic
7 2160 MB SONY
进入某目录请输入对应编号(exit退出):
遇到System Volume Information 会显示错误,权限的东西就没去折腾了
作者: 523066680 时间: 2013-8-3 23:23 标题: 再举个栗子
本帖最后由 523066680 于 2013-8-3 23:27 编辑
41 30 MB .thumbnails
42 38 MB 桌面
43 375 MB My Documents
44 682 MB Application Data
45 3660 MB Local Settings
进入某目录请输入对应编号(exit退出):45
当前目录:"C:\Documents and Settings\am\Local Settings"
1 0 MB Apps
2 0 MB TempDIR
3 4 MB History
4 123 MB Temporary Internet Files
5 485 MB Temp
6 3046 MB Application Data
进入某目录请输入对应编号(exit退出):6
当前目录:"C:\Documents and Settings\am\Local Settings\Application Data"
省略若干行
41 4 MB Yodao
42 29 MB Nokia
43 38 MB ActiveState
44 46 MB NewSoft
45 66 MB Adobe
46 196 MB Downloaded Installations
47 382 MB Microsoft
48 583 MB Mozilla
49 1666 MB Google
进入某目录请输入对应编号(exit退出):49
当前目录:"C:\Documents and Settings\am\Local Settings\Application Data\Goo
gle"
1 0 MB CrashReports
2 0 MB GBScreensaver
3 0 MB Google Calendar Sync
4 0 MB Google Talk
5 0 MB Picasa2Albums
6 5 MB Update
7 42 MB Picasa2
8 1618 MB Chrome
相比平常使用的Mozilla ,chrome 竟然占用1.6G
作者: terse 时间: 2013-8-6 23:55
唉 比赛题就难在那个比较目录文件问题
几十个文件夹还爽了
测试了 2000多个文件夹 几个小时的比较也没玩完 直接等到没心情
看来只有放弃了 试了变量处理 和临时文件处理
思绪肯定在那里卡住
作者: 523066680 时间: 2013-8-7 08:40
本帖最后由 523066680 于 2013-8-7 08:50 编辑
回复 4# terse
俺还没开始做那题。
以前用perl写过类似的,每一个目录的文件列表都存到哈希表里(像vbs字典),然后筛出重复的。
不过当时也写的一般般,有些目录是整个体系都相同,那么实际对比的时候就会出现子目录也相同的情况。
全都列举出来,有点重复了。
还有十几天,本着休闲的心态去做。不要太上心了。毕竟咱还有工作。
作者: terse 时间: 2013-8-7 15:18
回复 5# 523066680
当然是娱乐心 来这里就是娱乐为主
但我有强迫症的
总算搞到一个可忍受范围 效率还是不满意 在看看
作者: 523066680 时间: 2013-8-7 16:15
回复 6# terse
加了个油。
作者: 523066680 时间: 2013-8-10 09:16
本帖最后由 523066680 于 2013-8-10 09:24 编辑
还是那道题,我的大致方案已经定下了。初始只做大致的文件名一致判断,
后面增加一道审核,用dir /w (不显示日期,显示总大小)输出两个目录文件列表的细节,然后fc核对是否一致。
遇到一个奇怪的问题,有时候一致,有时候不一致。后来发现问题出在可用空间大小……
难念的经.mp3
29 个文件 182,955,882 字节
2 个目录 5,376,098,304 可用字节
难念的经.mp3
29 个文件 182,955,882 字节
2 个目录 5,376,102,400 可用字节
瞎折腾![](http://www.bathome.net/images/smilies/default/lol.gif)
还有一个折腾是磁盘出了问题,不管怎么判断都得不到正确的结果=_=
坑
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |