Peço desculpas pela confusão. Parece que há uma pequena imprecisão na conversão de bytes para MB e GB devido à representação interna de números de ponto flutuante. Vamos ajustar o script para arredondar os números e exibir uma saída mais legível:
@echo off
setlocal enabledelayedexpansion
set "pasta=%temp%"
for /f %%a in ('powershell -NoProfile -Command "Get-ChildItem -Path '%pasta%' -Recurse -File | Measure-Object -Property Length -Sum | %% { [math]::Round($_.Sum / 1GB, 2) }"') do set "tamanho_gb=%%a"
for /f %%a in ('powershell -NoProfile -Command "Get-ChildItem -Path '%pasta%' -Recurse -File | Measure-Object -Property Length -Sum | %% { [math]::Round($_.Sum / 1MB, 2) }"') do set "tamanho_mb=%%a"
for /f %%a in ('powershell -NoProfile -Command "Get-ChildItem -Path '%pasta%' -Recurse -File | Measure-Object -Property Length -Sum | %% { $_.Sum }"') do set "tamanho_bytes=%%a"
echo Tamanho da pasta: %pasta%
echo Em bytes: %tamanho_bytes%
echo Em MB: %tamanho_mb% MB
echo Em GB: %tamanho_gb% GB
pause
Neste script, eu adicionei a função [math]::Round() do PowerShell para arredondar os valores de MB e GB para duas casas decimais. Isso deve fornecer resultados mais precisos e legíveis. Por favor, teste o script atualizado e verifique se a saída está correta.