[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 14# CrLf
这里要加 /s 得到 最后得到 %windir%   9909141116 字节 这个应该是总大小吧
CrLf 兄 再对照 右键属性 看大小是否一致
我这里显示
  1.                56690 个文件     9909141116 字节
  2.            32485 个目录    24819781632 可用字节
复制代码
1

评分人数

    • CrLf: 谢谢指点,学习了!技术 + 1

TOP

回复 16# terse


    噢!测试无误,原来还可以这样

TOP

回复 2# CrLf


    dir提取的是文件大小,文件夹是汇总的

TOP

回复 15# 523066680


    大佬,怎么选择指定的目录啊
为卡卡西带盐

TOP

回复 19# 科零仿佛


    现在?推荐 磁盘占用可视化工具:SpaceSniffer

TOP

回复 15# 523066680


    大佬,找管理员修改了下你的代码,可以不用提取隐藏文件夹:
::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

TOP

回复  wang5185244
纯p效率够不
terse 发表于 2014-8-28 01:33

大于1M小于10M的显示不对

TOP

本帖最后由 aloha20200628 于 2024-6-5 11:50 编辑


十年后再看本帖的解法还是两条最简之道,纯P方案和调用powershell方案(以下两段代码均存为批处理脚本运行)
对比了二者当输出结果一致时的稳定用时比例(须系统硬盘搜索缓存完全预热后),约为1:3
体量较大的实测目录包含约3,000个子目录,约30,000个文件,二者对指定目录统计其总量时均计入系统文件和隐藏文件。
  1. @echo off &dir /a/s/-c "%~1"|findstr /ric:" 个文件 ">0.0
  2. for /f "tokens=3 delims= " %%z in (0.0) do set "z=%%z"
  3. echo,%z%&del/q 0.0&pause&exit/b
复制代码
  1. powershell "(gci '%~1' -force -recurse -erroraction silentlycontinue | measure length -s).sum"
  2. pause&exit/b
复制代码

TOP

返回列表