有没有办法批量输出磁盘上的文件大小?

时间:2015-06-17 13:37:45

标签: file batch-file filesize

有没有办法像在属性窗口中那样获取文件的磁盘大小:

我试过了:

(在批处理文件中)

echo %~z1

for %i in (TestFile.txt) do echo %~zi

dir

但他们只返回文件的大小。

有没有办法像你看到的那样获得“磁盘大小”  在属性窗口中?

3 个答案:

答案 0 :(得分:5)

有趣的问题。我不知道磁盘值的大小是任何可编写脚本的对象的属性。您可以通过获取文件大小模数每个群集,从文件大小中减去该模数,然后添加群集大小来计算它。 (编辑:或使用Aacini更高效的计算,我仍然试图理解。)

@echo off
setlocal

for %%I in (Testfile.txt) do (
    set "fs=%%~zI"
    for /f %%J in (
        'wmic volume where "driveletter='%%~dI'" get blocksize /value'
    ) do 2>nul set /a %%J
)

echo Size: %fs%

set /a ondisk = ((fs-1)/blocksize+1) * blocksize

echo Size on disk: %ondisk%

许多网站声称fsutil fsinfo ntfsinfo DRIVE:是获取每个群集字节数的最佳方式。看起来这种方法充满了危险,不同的标签取决于区域设置和不同版本的Windows的不同行数。此外,正如Marged所说,fsutil需要提升。这种WMI方法似乎更普遍,而且不需要管理员权限。

  

感谢JosefZ,Marged和Aacini的所有投入!

答案 1 :(得分:2)

这不是一个答案,只是@rojo要求的值:

NTFS-Volumeseriennummer             0xacf01e6ef01e3ed0
NTFS-Version :                           3.1
LFS-Version    :                  2.0
Anzahl der Sektoren :               0x000000000ed737ff
Gesamtzahl Cluster :                0x0000000001dae6ff
Freie Cluster :                     0x00000000008c8d41
Insgesamt reserviert :              0x0000000000000f70
Bytes pro Sektor  :                 512
Bytes pro physischem Sektor :       512
Bytes pro Cluster :                 4096
Bytes pro Dateidatensatzsegment   : 1024
Cluster pro Dateidatensatzsegment : 0
Gültige MFT-Datenlänge :            0x000000001c1c0000
MFT-Start-LCN  :                    0x00000000000c0000
MFT2-Start-LCN :                    0x0000000000000002
MFT-Zonenstart :                    0x00000000018a8ee0
MFT-Zonenende   :                   0x00000000018b12e0
Ressourcen-Manager-Bezeichner:        A81246B1-33B0-11E4-A94B-AEB4ABF863CB

这是来自德国的Windows 8.1。 我认为如果有必要使批处理区域设置独立,则无法采用grepping方法。而是使用脚本主机编写适当的文件系统对象脚本将是一种解决方案。

WMIC命令有这个结果......

SOMENAME,4096,C:\

...加上我不需要使用管理权限运行此命令的优势。

答案 2 :(得分:1)

在寻找相同问题的答案时,我发现了这个问题:
http://www.ltr-data.se/opencode.html/
sizeof工具就是这样做的。

  

sizeof,由Olof Lagerkvist提供的免费软件。 http://www.ltr-data.se电子邮件:   olof@ltr-data.se更多信息,包括发行许可和   源代码可在网站上找到。

     

此工具显示磁盘上文件和文件的总分配大小   目录。

     

命令行语法:sizeof [-xo] [-presentation] file1 [file2 ...]

     

-x请勿遵循交叉点或其他重新分析点。这可以确保            sizeof保留在开始搜索的文件系统中。

     

-o包括脱机文件的大小。

     

-c计算并显示每个找到的目录中的文件数,而不是            计算并显示它们的大小。

     

演示文稿确定显示哪种格式的尺寸   文件和目录。该参数可以是以下任意一个:

     

-b 512字节块的数量。   -h可读格式。   -k千字节。   -m兆字节。   -g千兆字节。   -t TB。

它比本页上提出的其他解决方案要好,因为它提供了正确的“磁盘大小”(顺便说一句,由于当今许多存储设备都在使用中,因此应将其重命名为“分区大小”或“存储设备大小”)。而非“磁盘”)用于压缩或稀疏文件。我正是想比较NTFS压缩和“稀疏”对一堆大文件的影响,这些文件是从文件共享软件中部分下载的。因此,我将首先使用sizeof来获取当前已压缩文件的实际分配大小,然后将其解压缩,然后将它们转换为“稀疏”,然后运行{{1} }。

我只发现了一种实用程序,可以将非稀疏文件转换为稀疏文件,并实际上取消分配其空扇区:一个名为sizeof的命令行工具,该工具已发布10多年了, “仅用于演示目的”,似乎早已消失,但仍然可以在这里使用:
https://web.archive.org/web/20151103231305if_/http://pages.infinit.net/moonligh/eMule/Releases/SparseTest.zip

SparseTest还可以在应用“ sparse”属性之前显示“磁盘大小”(但是输出更为复杂,因此如果进一步需要该信息,则在批处理脚本中使用起来将不容易)。它前后计算校验和,以确保在此过程中保留文件的完整性(我仍然建议您先进行备份,然后再使用WinMerge或MD5Checker等其他工具来验证所有文件是否严格相同)。与带有“ C”属性(蓝色)的文件相反,没有什么区别“稀疏”文件和常规文件,除了“属性”列中的“ P”(它甚至没有出现在“属性”中)。

Windows原生工具SparseTest可以设置稀疏属性,但实际上不会压缩文件,即使其包含很多空白,它的“磁盘大小”也保持不变。部门;只有在以后使用空扇区增加文件大小的情况下,它们才会以“稀疏”的方式添加,即存储为元数据且未实际分配。