Как перечислить всю папку с размером с помощью пакетного файла
Я хочу простое решение для списка папок и их размера в формате txt или csv.
Я использую этот код для списка папок
dir C:\Temp\*.* /b /a:d > C:\folderList.txt
текущий выход
<<folderList.txt>>
folder1
folder2
folder3
желаемый выход
<<folderList.txt>>
folder1 # 100 MB
folder2 # 30 MB
folder3 # 110 MB
Просто он будет генерировать размер каждой папки.
Как я могу продолжить? любая помощь
Ответы
Ответ 1
Для каждой папки в списке используйте команду dir
для получения размера файлов под папкой
@echo off
setlocal disabledelayedexpansion
set "folder=%~1"
if not defined folder set "folder=%cd%"
for /d %%a in ("%folder%\*") do (
set "size=0"
for /f "tokens=3,5" %%b in ('dir /-c /a /w /s "%%~fa\*" 2^>nul ^| findstr /b /c:" "') do if "%%~c"=="" set "size=%%~b"
setlocal enabledelayedexpansion
echo(%%~nxa # !size!
endlocal
)
endlocal
Он выполняет итерацию по указанной папке (передается как параметр в командный файл или текущий каталог, если нет параметра).
Для каждой папки внутри него (for /d
) внутри внутренней команды for
выполняется рекурсивная команда dir
, и из ее вывода сводная строка в конце (извлеченная findstr
) анализируется ( команда tokens
в for
) и извлекается общий размер всех файлов в этой подпапке. Тогда имя (и расширение, если оно есть) в папке и размер элементов под ней, эхо передается на консоль.
Если файл необходимо создать, перенаправьте вывод пакета в файл
getSizes.cmd "c:\temp" > C:\folderList.txt
Ответ 2
Используя отличный код MC ND, я добавил преобразование в Kb, Mb, Gb и т.д. На всякий случай вы предпочтете его использовать в этих форматах.
@echo off
setlocal disabledelayedexpansion
set "folder=%~1"
if not defined folder set "folder=%cd%"
for /d %%a in ("%folder%\*") do (
set "size=0"
for /f "tokens=3,5" %%b in ('dir /-c /a /w /s "%%~fa\*" 2^>nul ^| findstr /b /c:" "') do if "%%~c"=="" set "size=%%~b"
setlocal enabledelayedexpansion
call :GetUnit !size! unit
call :ConvertBytes !size! !unit! newsize
echo(%%~nxa - !newsize! !unit!
endlocal
)
endlocal
exit /b
:ConvertBytes bytes unit ret
setlocal
if "%~2" EQU "KB" set val=/1024
if "%~2" EQU "MB" set val=/1024/1024
if "%~2" EQU "GB" set val=/1024/1024/1024
if "%~2" EQU "TB" set val=/1024/1024/1024/1024
> %temp%\tmp.vbs echo wsh.echo FormatNumber(eval(%~1%val%),1)
for /f "delims=" %%a in (
'cscript //nologo %temp%\tmp.vbs'
) do endlocal & set %~3=%%a
del %temp%\tmp.vbs
exit /b
:GetUnit bytes return
set byt=00000000000%1X
set TB=000000000001099511627776X
if %1 LEQ 1024 set "unit=Bytes"
if %1 GTR 1024 set "unit=KB"
if %1 GTR 1048576 set "unit=MB"
if %1 GTR 1073741824 set "unit=GB"
if %byt:~-14% GTR %TB:~-14% set "unit=TB"
endlocal & set %~2=%unit%
exit /b
Ответ 3
если вы используете Windows 7 или новую команду powershell и введите команду
ls-r → log.txt
он перечислит все файлы в текущем каталоге вместе с размером файла в байтах для файла журнала.
Ответ 4
попробуйте sed для Windows:
dir /-c /a /w /s|sed -nr "/:$/q;/:/h;/^\s+[0-9]/{s/.*[^0-9]([0-9]+.*)/\1/;H;g;s/\n/ /p}"
Ответ 5
My Утилита JREN.BAT может использоваться для получения списка папок с размерами. Это гибридный JScript/пакет script, который запускается изначально на любом компьютере Windows с XP и далее.
JREN не удобно конвертировать в MB (или любой другой блок) - он просто перечисляет размер в байтах. Но это удобно (и сравнительно быстро), чтобы получить листинг:
jren "$" "' # '+size()" /d /j /list /p "d:\temp" >"C:\folderList.txt"
Возможно, вы сначала захотите сначала установить размер папки, а пробел будет заполнен до фиксированной ширины, превышающей самую большую папку, за которой следует имя папки. Я считаю, что этот формат намного легче читать, и его все же легко разобрать:
jren "^" "size(' ')+' '" /d /j /list /p "d:\temp" >"C:\folderList.txt"
Результат выглядит примерно так:
1852 SomeFolderName
1616869 Another folder name
137764 yetAnother
Так как JREN - командный файл, вы должны использовать CALL JREN, если вы поместите команду в другую партию script.
Ответ 6
Как мы можем получить размер на диске в папке с помощью командной строки?
С уважением,
Alex