Windows, comment convertir la sortie d'octets du programme de traitement par lots en Ko, Mo ou Go?

0

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)

-

Joseph
la source
Math dans les fichiers batch NT - voir la solution de contournement: section 32 bits
DavidPostill
J'ai un article ici sur SO avec une méthode que vous pourriez intégrer à vos scripts de traitement de lot à l'aide de PowerShell dynamique, mais il s'agit toujours d'un traitement par lot pur utilisant simplement un PS pour tenir compte de la limitation du traitement par lot: stackoverflow.com/questions/42729893/… .... Il y a une autre réponse sur ce post aussi bien que vous pouvez trouver utile, mérite une lecture je suppose que vous ne savez jamais.
Pimp Juice IT

Réponses:

0

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:

set /a kb=%bytes% / 1024
set /a mb=%bytes% / 1048576
set /a gb=%bytes% / 1073741824
echo %kb% kB
echo %mb% MB
echo %gb% GB

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.

Berend
la source
0

cmd.exe est un processus 32 bits, donc commandes comme:

set /a result1=%bytes% / 1024

é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:

C:\Windows\SysWOW64\cmd.exe /C path\to\batchfile.cmd
jcbermu
la source
Je ne vois pas beaucoup de chance avec le cmd de syswow .. i.imgur.com/WReB1cs.png
barlop