大佬,找管理员修改了下你的代码,可以不用提取隐藏文件夹:
::Show Each Folder Size with Percent
:: via 523066680, 2023-07
::维护记录:
::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 /d %%a in (*) 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