如何通过batch file列出所有具有大小的文件夹

我想要一个简单的解决scheme列表的文件夹和他们的大小以txt或csv格式。

我使用这个代码文件夹列表

dir C:\Temp\*.* /b /a:d > C:\folderList.txt 

电stream输出

 <<folderList.txt>> folder1 folder2 folder3 

所需的输出

 <<folderList.txt>> folder1 # 100 MB folder2 # 30 MB folder3 # 110 MB 

只是它会产生每个文件夹的大小..我怎么能继续? 任何帮助

对于列表中的每个文件夹,使用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 ),在inner for命令中执行递归dir命令,并从其输出结束(由findstr提取)的摘要行被解析( for命令中的tokens )检索此子文件夹下所有文件的大小。 然后文件夹的名称(和扩展名)以及其下的元素的大小被回显到控制台。

如果需要创建文件,请将批量输出重定向到文件

 getSizes.cmd "c:\temp" > C:\folderList.txt 

使用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 

如果您正在使用Windows 7或新的使用powershell和键入命令

ls -r >> log.txt

它将列出当前目录中的所有文件以及以字节为单位的文件大小以记录文件。

尝试Windows的sed :

 dir /-c /a /w /s|sed -nr "/:$/q;/:/h;/^\s+[0-9]/{s/.*[^0-9]([0-9]+.*)/\1/;H;g;s/\n/ /p}" 

我的JREN.BAT实用程序可用于获取大小的文件夹列表。 这是一个混合的JScript /批处理脚本,可以从XP以后的任何Windows机器上本地运行。

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。

我们怎样才能使用命令提示符来获得文件夹的磁盘大小?

问候,亚历克斯