CMD和Windows PowerShell命令查看当前文件夹的所有一级子文件夹的空间大小

一、前言

        在Windows系统中,我们平时查看文件夹大小需要右键文件夹,在属性中查看文件夹占用大小,这时一旦文件多了起来,有十几个文件夹的大小需要查看,那就变得非常麻烦,不仅要一个个点击右键属性菜单,并且有时为了对比各个文件夹占用的大小就需要记住它们,这就很麻烦。所以这里为了解决这个问题,我查找资料后总结了两个方法:一个是CMD命令,这个很通用,使用也很简单,直接打包成一个批处理命令文件即可在各处使用了;另一个是使用Windows PowerShell工具,这个虽然说使用起来比较麻烦,但是它的优点是各个命令代码看着容易理解。

二、CMD命令查看各个文件的大小

@echo off

chcp 437

echo TB,GB,MB,KB,bit

setlocal EnableDelayedExpansion

rem 设置目标字符串长度
set "TARGET_LENGTH=50"

rem 定义填充字符
set "PAD_CHAR= "

rem 函数:PadString
rem 参数:%1 - 原始字符串
rem 输出:补齐后的字符串
set PadString=for /l %%A in (1 1 %TARGET_LENGTH%) do if "!PADDED_STRING:~%TARGET_LENGTH%!"=="" set "PADDED_STRING=%PAD_CHAR%!PADDED_STRING!"

set "ROOT_DIR=%cd%"
if "%ROOT_DIR:~-1%"=="\" set "ROOT_DIR=%ROOT_DIR:~0,-1%"

for /d %%D in ("%ROOT_DIR%\*") do (
    set "DIR_NAME=%%D"
    set "SIZE="

    rem 获取目录中所有文件的总大小
    for /f "tokens=3" %%S in ('dir /s /-c "!DIR_NAME!" ^| findstr /r /c:"[0-9][0-9]* File(s)"') do (
        set "SIZE=%%S"
    )

    rem 计算相对路径
    set "DIR_NAME=!DIR_NAME:%ROOT_DIR%\=!"

    rem 初始化填充字符串
    set "PADDED_STRING=!DIR_NAME!"

    rem 调用补齐函数
    call :PadString

    set "length=1"
    for /l %%A in (1,1,255) do (
        if not "!SIZE:~%%A,1!"=="" set /a length+=1
    )

    setlocal enabledelayedexpansion
    if !length! gtr 3 (
        set /a "count=length/3"
        set /a "M=length%%3"

        set /a "startIndex=0"
        set /a "endIndex=!M!"

        if !M! gtr 0 (
            set /a "count+=1"
        ) else (
            set /a "endIndex+=3"
        )
        set "SIZE_RET="
        setlocal enabledelayedexpansion
        for /l %%i in (1,1,!count!) do (
            set /a "curLength=endIndex-startIndex"
            set "retStrTemp="
            for /l %%j in (0,1,!length!) do (
                if %%j geq !startIndex! (
                    if %%j lss !endIndex! (
                        set "retStrTemp=!retStrTemp!!SIZE:~%%j,1!"
                    )
                )
            )
            set "SIZE_RET=!SIZE_RET!!retStrTemp!,"
            rem echo !startIndex!-!endIndex! !SIZE_RET! !curLength!
            set /a "startIndex=endIndex"
            set /a "endIndex+=3"
        )
        echo !PADDED_STRING! : !SIZE_RET:~0,-1! bytes
        endlocal
    ) else (
        echo !PADDED_STRING! : !SIZE! bytes
    )
    endlocal
)

endlocal
pause
goto :EOF

:PadString
for /l %%A in (1 1 %TARGET_LENGTH%) do (
    if "!PADDED_STRING:~%TARGET_LENGTH%!"=="" (
        set "PADDED_STRING=%PAD_CHAR%!PADDED_STRING!"
    )
)
exit /b

命令内容如上,直接复制放入文件(.bat)中双击运行即可。这个代码主要思路是先利用dir命令得到目标文件夹的所有文件的大小,然后使用findstr命令查找打印的大小信息,最后累计叠加即可得知目标文件夹的总大小,最后为了方便查看使用“,”将数据位分割打印即可得到列表,效果如下,这里我直接在D盘运行:

三、PowerShell命令查看

Get-ChildItem -Directory | ForEach-Object {
    $size = (Get-ChildItem $_.FullName -Recurse | Measure-Object -Property Length -Sum).Sum
    [PSCustomObject]@{
        Name = $_.Name
        Size = "{0:N2} MB" -f ($size / 1MB)
    }
} | Format-Table -AutoSize

思路和CMD命令一样,获取各个子文件的大小累加得到文件夹的大小,这里代码就很好理解了相比就很简洁。它打包为文件运行也可以,将上面的代码复制放在.ps1文件,运行它有两个方式:在CMD命令行工具中运行、在PowerShell命令行工具中运行;这两个方式,不管是哪一个都是需要权限的,不如直接打开PowerShell命令行工具复制上面内容直接运行。效果图如下:

补充:在打包为文件时,需要在结尾处加上能让窗口暂停的代码,否则窗口会自动关闭,命令代码如下:

Read-Host -Prompt "Press Enter to exit"
或者
Pause
或者
Start-Sleep -Seconds 65535

四、怎么使用CMD命令行工具和PowerShell工具

使用CMD工具的方法:

1、快捷键Win+R后输入 cmd运行即可

2、在导航栏搜索栏搜索:命令提示符

使用PowerShell

1、Win+X 唤醒如下图菜单

2、右键开始,唤醒如下图菜单

上面两个任意一个方式唤醒菜单后,打开Windows PowerShell即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值