我有一个名为文件的目录,它有.doc,.xlsx,.pdf,.htm等文件和其他目录。
我想使用CMD计算此目录中任何类型文档的大小。
例如:我需要计算.html文档的数量及其总大小。
Dir命令显示文件总数及其大小。
答案 0 :(得分:0)
在第一个for
循环中获取所有可用的扩展程序
使用第二个for
循环遍历每个找到的扩展名
使用第三个(嵌套)for
循环获取文件数和累积大小:
@echo off
setlocal &REM enabledelayedexpansion
for %%a in (*) do (
set "ext_%%~xa=*%%~xa"
)
for /f "tokens=2 delims==" %%a in ('set ext_') do (
for /f "tokens=1,3" %%b in ('dir /-c %%a^|findstr /e "Bytes"') do echo %%a: Files:%%b Size: %%c
)
注意:您可能必须根据您的语言调整“tokens = 1,3”和"Bytes"
字符串。在我的(德语)窗口上,dir /a-d /-c
的摘要如下所示:
15 Datei(en), 42291 Bytes <<< this is the needed line
0 Verzeichnis(se), 358679015424 Bytes frei
(注意:dir /-c
删除了“千位分隔符”,在某些语言中为点.
,在其他语言中为逗号,
答案 1 :(得分:0)
以下是两个示例,您只需编辑/确认第2行的文件路径:
第一个使用Dir
并尝试根据您的问题找到所需的行:
@Echo Off
Set "SrcDir=%UserProfile%\Documents"
If "%~1"=="" (Set "_=%SrcDir%\*.*") Else Set "_=%SrcDir%\*.%~1"
If Not Exist "%_%" (Echo %_% No matches&GoTo EndIt)
Set "$="
For /F "Tokens=*" %%A In ('Dir/D/-C "%_%"^|FindStr/BC:" "'
) Do If Not Defined $ Set "$=%_% %%A"
Echo(%$%
:EndIt
Timeout -1
第二种方法使用PowerShell,它可以让您更好地控制文件大小单位(我已经使用过KB)。
@Echo Off
Set "SrcDir=%UserProfile%\Documents"
If "%~1"=="" (Set "_=%SrcDir%\*.*") Else Set "_=%SrcDir%\*.%~1"
If Not Exist "%_%" (Echo %_% No matches&GoTo EndIt)
Powershell -C "$n=(GCI '%_%'|Measure).Count;"^
"$s=[Math]::Round((GCI '%_%'|Measure -S Length).Sum/1kB,2);"^
"Write-Host '%_% ' $n 'file(s) totalling' $s'kB'"
:EndIt
Timeout -1
或者:
all
%SrcDir%
个文件
或者:
scriptName.cmd
- all
%SrcDir%
个文件总数
scriptName.cmd xlsx
- .xlsx
%SrcDir%
个文件总数
注意:在5
行和9
行上紧跟%_%
之后的空格是单个标签