找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 33287|回复: 5

[文件操作] [已解决]批处理如何获取指定文件夹及其子文件夹的大小?

[复制链接]
发表于 2015-1-22 13:38:29 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-8-1 21:46 编辑

假设E盘有个文件夹test,大小12MB,内有两个文件夹A和B,A的大小为3MB,B的大小为9MB,那么要如何获取test文件夹的大小及子文件夹A和B的大小?
试过用扩充符%%~zi,貌似只能获取文件的大小,不能获取文件夹的大小

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-1-22 16:10:16 | 显示全部楼层
本帖最后由 Bat_s 于 2015-1-22 16:22 编辑

::好的办法没有想到,只有用这个办法了,你看看行不,此批处理和TEST文件夹在同一根目录下,而且TEST文件夹下边只能有两个文件夹,多了无效
@echo off
::TEST 文件夹下子文件夹的大小容量显示,只能显示两个子文件夹,且子文件夹下不能有三级子文件夹
dir test /s >te.txt
type te.txt | find "a">a.txt
type te.txt | find "b">b.txt
type te.txt | find "字节">zj.txt
type te.txt | find "目录">mulu.txt
find /n "个" zj.txt>suma.txt
find /n "\" mulu.txt>mulua.txt

for /f "tokens=2"  %%i in ('findstr [2 mulua.txt') do echo  %%i目录的大小为:
for /f "tokens=4-5" %%i in ('findstr [2 suma.txt') do echo %%i %%j

for /f "tokens=2"  %%i in ('findstr [3 mulua.txt') do echo  %%i目录的大小为:
for /f "tokens=4-5" %%i in ('findstr [3 suma.txt') do echo %%i %%j
del  te.txt a.txt b.txt zj.txt mulu.txt suma.txt mulua.txt
pause
发表于 2015-1-22 16:24:17 | 显示全部楼层
本帖最后由 apang 于 2015-1-22 16:31 编辑
  1. @echo off
  2. pushd "D:\Test"
  3. (for /f "delims=" %%i in ('dir /ad /b /s') do (
  4.         pushd "%%i"
  5.         for /f "tokens=1,2*" %%a in ('dir /a /-c /s') do (
  6.                 if defined flag (
  7.                         set "flag="
  8.                         echo,文件夹:%%i 大小:%%c
  9.                 ) else if "%%a" == "所列文件总数:" set flag=1
  10.         )
  11.         popd
  12. ))>"%~dp0结果.txt"
  13. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
pcl_test + 1 乐于助人

查看全部评分

发表于 2015-1-22 16:43:19 | 显示全部楼层
http://bbs.bathome.net/viewthread.php?tid=25682
改写成 BJ 混排就是这样:
  1. 1>1/* :Bat+JScript
  2. @echo off
  3. dir /ad /b | cscript -nologo -e:jscript "%~0"
  4. pause & exit /b
  5. */

  6. var fso = WScript.CreateObject("Scripting.Filesystemobject")

  7. while(!WSH.StdIn.AtEndOfStream){
  8.         try{
  9.                 var folder = WSH.StdIn.ReadLine()
  10.                 if(!fso.FolderExists(folder))break
  11.                 WSH.Echo(folder + " 长度为 " + fso.GetFolder(folder).Size/1024/1024 + "MB")
  12.         }
  13.         catch(Err){}
  14. }
复制代码
发表于 2015-1-26 10:14:07 | 显示全部楼层
  1. for /r e:\ /d %%i in (*) do echo %%i %%~zi
复制代码
回复 1# pcl_test
 楼主| 发表于 2015-1-26 17:20:03 | 显示全部楼层
本帖最后由 pcl_test 于 2017-5-12 21:58 编辑

回复 5# c755731262
感谢你的回复,可以看出你有在学习批处理的相关知识,不过你的代码是有弊端的,我在问题中提到过用%%~z扩充符并不好,望你再接再励
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 04:44 , Processed in 0.010767 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表