Dans Windows batch, comment convertir des octets en Ko, Mo ou Go?
En lot, comment afficher les résultats à l'écran?
Vous trouverez ci-dessous un lot Windows qui génère une taille de dossier en octets.
Exemple:
2.041.737.167 octets en d: \ temp
@echo off
set bytes=
for /f "usebackq tokens=1,2,3,4" %%a in (`dir /s/w/c "d:\temp\" ^| findstr "File(s)"`) do set bytes=%%c
echo %bytes% bytes in d:\temp\*.*
pause
En batch, comment convertir?
2 041 737 167 octets à:
1 993 883 Ko (2.041.737.167 / 1024)
1947 Mo (2.041.737.167 / 1048576)
1,9 Go (2.041.737.167 / 1073741824)
-
Réponses:
Si vous voulez faire de l'arithmétique, vous devez d'abord vous débarrasser des mille séparateurs. Alors, change
dir /s/w/c
àdir /s/w/-c
. Ensuite, c'est une division simple:Notez que les nombres sont limités à 32 bits de précision. Par conséquent, cela échouera pour les grands dossiers. En outre, comme Yorik l’a mentionné, les nombres seront tronqués.
La sortie n'aura pas mille séparateurs. Si vous voulez cela, c'est probablement une toute nouvelle question.
la source
Batch ne supporte pas les virgules flottantes pour autant que je sache, vos résultats seront donc tronqués:
Émettrait
1
au lieu de1.9
Souvent, les gens appellent cscript (etc.) pour des fonctions mathématiques (par exemple: https://stackoverflow.com/questions/1503888/floating-point-division-in-a-dos-batch )
la source
cmd.exe
est un processus 32 bits, donc commandes comme:échouera avec l'erreur: "Nombre invalide. Les nombres sont limités à une précision de 32 bits
Si vous vous trouvez dans un périphérique 64 bits (de nos jours, c’est très probable), appelez l’invite de commande de
C:\Windows\SysWOW64\cmd.exe
et cela fonctionnera, par exemple votre ligne de commande devrait ressembler à ceci:la source