Câu hỏi thú vị. Tôi không nhận thức được kích thước trên đĩa giá trị là một tài sản của bất kỳ đối tượng scriptable. Bạn có thể tính toán nó bằng cách nhận được tập tin modulo byte cho mỗi cụm, trừ đi modulo đó từ kích thước tệp, sau đó thêm kích thước cụm. (Edit: hoặc sử dụng tính toán hiệu quả hơn Aacini, mà tôi vẫn đang cố gắng để hiểu được.)
@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%
Nhiều trang web tuyên bố rằng fsutil fsinfo ntfsinfo DRIVE:
là cách tốt nhất để có được những byte cho mỗi cluster. Dường như phương pháp này đầy nguy hiểm, với các nhãn khác nhau tùy thuộc vào miền địa phương và số dòng khác nhau cho các phiên bản Windows khác nhau. Ngoài ra, như Marged nói, fsutil
yêu cầu độ cao. Phương pháp WMI này dường như hoạt động phổ biến hơn và không yêu cầu quyền quản trị.
Cảm ơn JosefZ, Marged và Aacini cho tất cả nội dung bạn đã nhập!
Sử dụng 'Byte trên cụm '(ví dụ: 4096) thay vì' Bytes trên mỗi ngành vật lý' (ví dụ: 512). (Đã xác minh trên SSD _tiny_ của tôi). Sau đó, 'set/a ondisk = (fs/clus +1) * clus)' – JosefZ
Cảm ơn Josef! Tôi không chắc chắn nên sử dụng giá trị nào vì chúng đều giống nhau trên hệ thống mà tôi đang sử dụng. – rojo
'findstr/i/C:" byte trên mỗi cụm "' lưu ý tầm quan trọng chuyển đổi '/ C:'. Chỉnh sửa bình luận trước đó của tôi: Sau đó, 'set/a ondisk = (fs/clus +1) * clus' mà không theo đuôi') '. – JosefZ