一、前言
在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即可