Interesujące pytanie. Nie jestem świadomy rozmiaru na wartości dysku będącego własnością dowolnego skryptowalnego obiektu. Można go obliczyć, pobierając modulo bajtów na klaster, odejmując ten modulo od rozmiaru pliku, a następnie dodając rozmiar klastra. (Edit: lub użyć bardziej wydajne obliczenia Aacini, który ja wciąż staram się zrozumieć.)
@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%
Wiele stron internetowych twierdzą, że fsutil fsinfo ntfsinfo DRIVE:
jest najlepszym sposobem, aby uzyskać bajtów na klaster. Wydaje się, że metoda ta jest pełna zagrożeń, z różnymi etykietami w zależności od ustawień regionalnych i różnej liczby linii dla różnych wersji systemu Windows. Dodatkowo, jak mówi Marged, fsutil
wymaga podniesienia. Ta metoda WMI wydaje się bardziej uniwersalna i nie wymaga uprawnień administratora.
Dzięki JosefZ, Marged i Aacini za wszystkie uwagi!
Używaj "bajtów na klaster" (np. 4096) zamiast "bajtów na sektor fizyczny" (np. 512). (Zweryfikowano na moim małym dysku SSD). Następnie 'set/a ondisk = (fs/clus +1) * clus)' – JosefZ
Dzięki Josef! Nie byłem pewien, jaką wartość użyć, ponieważ są one takie same w systemie, w którym teraz działam. – rojo
'findstr/i/C:" bajty na klaster "' zwróć uwagę na znaczenie przełącznika '/ C:'. Edytuj mój poprzedni komentarz: Następnie "set/a ondisk = (fs/clus +1) * clus' bez ciągnięcia') '. – JosefZ