本帖最后由 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
复制代码
|