有没有办法在属性窗口中获取文件的磁盘大小:
我试过了:
(在批处理文件中)
echo %~z1
,
for %i in (TestFile.txt) do echo %~zi
,
dir
但它们只返回文件的大小。
有没有办法像在属性窗口中看到的那样获得“磁盘大小”?
有趣的问题。我不知道磁盘值的大小是任何可编写脚本的对象的属性。您可以通过获取文件大小模数每个群集,从文件大小中减去该模数,然后添加群集大小来计算它。 (编辑:或使用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的所有投入!
这不是一个答案,只是@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:\
...加上我不需要使用管理权限运行此命令的优势。
寻找同一问题的答案,我刚刚发现:
http://www.ltr-data.se/opencode.html/
sizeof
工具就是这样做的。
sizeof,由Olof Lagerkvist提供的免费软件。 http://www.ltr-data.se电子邮件:[email protected]网站上提供了更多信息,包括发布权限和源代码。
此工具显示磁盘上文件和目录的总分配大小。
命令行语法:sizeof [-xo] [-presentation] file1 [file2 ...]
-x不要遵循连接点或其他重新分析点。这可以确保sizeof保持在开始搜索的文件系统中。
-o包括脱机文件的大小。
-c计算并显示每个找到的目录中的文件数,而不是它们的计数和显示大小。
演示文稿确定以哪种格式显示文件和目录的大小。参数可以是以下任何一种:
-b 512字节块的数量。 -h人类可读格式。 -k Kilobytes。 -m兆字节。 -g千兆字节。 -t太字节。
它比这个页面上提出的其他解决方案更好,因为它提供了正确的“磁盘大小”(顺便说一下,它应该被重命名为“分区大小”或“存储设备上的大小”,因为现在很多存储设备都不是“磁盘” “)用于压缩或稀疏文件。我确实想比较NTFS压缩和“稀疏”对一堆大文件的影响,这些文件是从文件共享软件中部分下载的;所以我将首先使用sizeof
来获取当前压缩的那些文件的实际分配大小,然后我将解压缩它们,然后将它们转换为“稀疏”,然后再次运行sizeof
。
我只发现了一个可以将非稀疏文件转换为稀疏文件的实用程序,并实际上取消分配其空扇区:一个名为SparseTest
的命令行工具,该工具在10多年前发布,“仅用于演示目的”,似乎很久以前就消失了,但仍然可以在那里找到:
https://web.archive.org/web/20151103231305if_/http://pages.infinit.net/moonligh/eMule/Releases/SparseTest.zip
在应用“稀疏”属性之前,SparseTest还会显示“磁盘大小”(但输出更复杂,因此如果需要为了进一步的目的而需要该信息,则在批处理脚本中使用它将不容易)。它会在之前和之后计算校验和,以确保在过程中保留文件的完整性(我仍然建议先进行备份,然后使用其他工具(如WinMerge或MD5Checker)验证所有文件是否完全相同)。与具有“C”属性(以蓝色显示)的文件相反,“稀疏”文件与常规文件之间没有区别,除了“属性”列中的“P”(它甚至不出现在“属性”中)。
本机Windows工具fsutil
可以设置稀疏属性,但它实际上并不压缩文件,它的“磁盘大小”保持不变,即使它包含很多空扇区;只有当文件大小随后用空扇区增加时,它们才会以“稀疏”方式添加,即存储为元数据而不是实际分配。