Interessante domanda. Non sono a conoscenza della dimensione sul valore del disco che è una proprietà di qualsiasi oggetto con script. È possibile calcolarlo recuperando il file modulo byte per cluster, sottraendo tale modulo dalla dimensione del file, quindi aggiungendo la dimensione del cluster. (Edit: o utilizzare il calcolo più efficiente del Aacini, che sto ancora cercando di capire.)
@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%
Molti siti web sostengono che fsutil fsinfo ntfsinfo DRIVE:
è il modo migliore per ottenere i byte per cluster. Sembra che questo metodo sia pieno di pericoli, con etichette diverse a seconda delle impostazioni locali e un numero diverso di righe per diverse versioni di Windows. Inoltre, come dice Marged, fsutil
richiede l'elevazione. Questo metodo WMI sembra funzionare in modo più universale e senza richiedere diritti di amministratore.
Grazie JosefZ, Marged e Aacini per tutto il vostro contributo!
Utilizzare "byte per cluster" (ad esempio 4096) anziché "byte per settore fisico" (ad esempio 512). (Verificato sul mio _tiny_ SSD). Quindi 'set/a ondisk = (fs/clus +1) * clus)' – JosefZ
Grazie Josef! Non ero sicuro di quale valore utilizzare, poiché sono entrambi uguali sul sistema in cui mi trovo ora. – rojo
'findstr/i/C:" byte per cluster "' nota l'importanza dell'interruttore '/ C:'. Modifica il mio commento precedente: Quindi 'set/a ondisk = (fs/clus +1) * clus' senza il punto') '. – JosefZ