Apenas como alternativa, você pode usar a saída do comando robocopy
para recuperar as informações necessárias
@echo off
setlocal enableextensions disabledelayedexpansion
set "file=d:\somewhere\file.ext"
for %%z in ("%file%") do for /f "tokens=1,2" %%a in ('
robocopy "%%~dpz." "%%~dpz." "%%~nxz" /l /nocopy /is /njh /njs /ndl /nc
') do if "%%~dz"=="%%~db" (
echo "%%~z" : [%%a]
) else (
echo "%%~z" : [%%a%%b]
)
robocopy
será usado para listar apenas ( /l
) as informações do arquivo que está sendo copiado, removendo qualquer informação não necessária da saída (o restante dos comutadores) e usando um comando for /f
para tokenizar o arquivo linhas de saída e leia apenas o tamanho do arquivo
No caso de pastas, a mesma ideia pode ser usada, mas em vez de ler os dados da lista de arquivos, podemos usar uma "cópia" recursiva e recuperar os dados do resumo da tarefa
@echo off
setlocal enableextensions disabledelayedexpansion
set "folder=%~f1" & if not defined folder set "folder=%cd%"
set "size=" & for %%z in ("%folder%") do for /f "skip=2 tokens=2,3 delims=: " %%a in ('
robocopy "%%~fz\." "%%~fz\." /l /nocopy /s /is /njh /nfl /ndl /r:0 /w:0 /xjd /xjf /np
^| find ":"
') do if not defined size (
(for /f "delims=0123456789." %%c in ("%%b") do (break)) && (
set "size=%%a%%b"
) || (
set "size=%%a"
)
)
echo "%folder%" : [%size%]
Comutadores alterados para recuperar apenas o resumo do trabalho e filtrados para apenas ler a linha que contém as informações Bytes
.
editado 2016/10/26 - mudou as opções de robocopy para problemas de permissão, alterou Byte:
retrieval para :
line filter mais ignorar a cláusula caso haja uma localidade sem o Bytes:
string, alteração da detecção da unidade de armazenamento.