|
powershell 法:
@echo off
setlocal enabledelayedexpansion
:: 参数检查
if "%~1"=="" (
echo 请将文件或文件夹拖放到此脚本上。
pause
exit /b
)
:: 获取规范路径并验证存在性
set "item=%~f1"
if not exist "!item!" (
echo 路径不存在: "!item!"
pause
exit /b
)
:: 特殊字符转义处理
set "safe_item=!item:'=''!"
set "safe_item=!safe_item:\=\\!"
set "safe_item=!safe_item:""=\"!"
:: 计算大小
set "size=0"
if exist "!item!\" (
for /f "delims=" %%a in ('powershell -Command "$sum=0; $path='%safe_item%'; Get-ChildItem -LiteralPath $path -Recurse -File -ErrorAction SilentlyContinue -Force | %%{ $sum += $_.Length }; $sum" 2^>^&1') do (
set "size=%%a"
)
) else (
for %%F in ("!item!") do set "size=%%~zF"
)
:: 错误捕获
if "!size!"=="" (
echo 无法计算大小,请检查路径权限
pause
exit /b
)
:: 单位转换优化
for /f "tokens=1-2" %%i in ('powershell -Command "$bytes=!size!; if($bytes -eq 0){'0 Bytes'}else{$units='Bytes,KB,MB,GB,TB,PB,EB' -split ','; $i=[math]::Floor([math]::Log($bytes,1024)); $i=[math]::Min($i,6); $num=$bytes/[math]::Pow(1024,$i); $fmt= if($i -eq 0){'{0} {1}'}else{'{0:N2} {1}'}; $fmt -f $num,$units[$i]}"') do (
set "value=%%i"
set "unit=%%j"
)
:: 结果输出
echo.
echo. 大小: !value! !unit!
echo.
pause |
|