2017-10-18 217 views
-1

我有一个目录命名文档,其中包含.doc,.xlsx,.pdf,.htm等文件和其他目录。使用CMD计算目录中文档的大小

我想使用CMD计算此目录中任何类型文档的大小。

例如:我需要统计.html文档的数量及其总大小。

Dir命令显示文件总数及其大小。

+0

做了任何尝试或只是等待代码? – aschipfl

回答

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 
) 

注意:您可能必须适应“令牌= 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删除了“千位分隔符”,这在一些语言点.,而在其他逗号,

+0

如何查找'dir'输出的倒数第二行,以便您不再依赖'Bytes'字符串?顺便说一下,你正在描述'dir/ad/-c',但是你在代码中使用'dir/-c' ... – aschipfl

+0

@aschipfl like'for/f“tokens = 1,3”%% a in('dir/ad/-c *^| findstr/bc:“”')如果没有定义x set x = %% a %% b'和 'echo%x%'?肯定是迈向正确方向的一步。仍然是问题:它总是令牌1和3? – Stephan

+0

不是,这会将第一行存入'x';我在想'set'x =“&set”y =“',然后'for/f”tokens = 1,3“%% a in('dir/ad/-c *^| findstr/bc :“”')设置“y =!x!” &set“x = %% a %% b”'和'echo /%y%'(实际上延迟的扩展需要正确切换以保证安全)。不幸的是,我也无法回答令牌问题。我不认为微软可以...... ;-) – aschipfl

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%

注:上线59空白紧跟%_%是单标签