Batch : Récupère la taille des différents dossiers
brucine Messages postés 23156 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai davantage une question qu'un problème.
Voilà, j'ai ce script en batch qui m'affiche en octets / Ko / Mo / Go la taille des différents dossiers du dossier dans lequel le script s'exécute.
Donc pour cela, j'ai ce petit script :
FOR /D %%d IN (*) DO (
FOR /R "." %%s IN (*) DO (
SET /A size+=%%~zs
)
SET doss=%%~nd
)
ECHO %doss% : %size% o
SET /A size_ko=%size%/1024
ECHO %doss% : ~%size_ko% Ko
SET /A size_mo=%size_ko%/1024
ECHO %doss% : ~%size_mo% Mo
SET /A size_go=%size_mo%/1024
ECHO %doss% : ~%size_go% Go
Ce petit script fonctionne très bien, mais (oui parce qu'il faut toujours quelque chose qui ne va pas) il ne m'affiche pas la bonne taille…
Il analyse actuellement un dossier ~78 Go (je m'en fous que le script soit rapide ou pas, j'ai tout mon temps) mais affiche que j'ai seulement ~838 Mo. Si quelqu'un à une idée du pourquoi du comment.
Je précise que les différents dossiers sont remplis que d'image au format PNG et sont rangés nommé ainsi : frame_%num.png.
Est-ce que les analyses de fichiers / dossiers sont limités en taille pour éviter d'éventuelles tâches beaucoup trop longues où sont justes tout simplement limités par une quantité maximale de fichiers différents par dossiers ?
- Batch : Récupère la taille des différents dossiers
- Fichier batch - Guide
- Batch converter - Télécharger - Photo & Graphisme
- Batch renommer une partie du nom de plusieurs fichiers ✓ - Forum Autoit / batch
- Color batch - Forum Autoit / batch
- Renommer tous les fichiers d'un dossier - Forum Windows
1 réponse
Bonjour,
Pour résoudre le problème, je dirais qu'il faut "retarder" la variable size comme ceci :
setlocal enabledelayedexpansion
FOR /D %%d IN (*) DO (
FOR /R "." %%s IN (*) DO (
SET /A size+=%%~zs
)
SET doss=%%~nd
)
ECHO !doss! : !size! o
SET /A size_ko=!size!/1024
ECHO !doss! : ~%size_ko% Ko
SET /A size_mo=%size_ko%/1024
ECHO !doss! : ~%size_mo% Mo
SET /A size_go=%size_mo%/1024
ECHO !doss! : ~%size_go% Go
-
Tu pourrais aussi simplifier le script comme ceci :
setlocal enabledelayedexpansion FOR /R "." %%s IN (*) DO SET /A size+=%%~zs ECHO !CD! : %size% o SET /A size_ko=%size%/1024 ECHO !CD! : ~%size_ko% Ko SET /A size_mo=%size_ko%/1024 ECHO !CD! : ~%size_mo% Mo SET /A size_go=%size_mo%/1024 ECHO !CD! : ~%size_go% Go
Bonjour,
Ne pas oublier qu'en cas d'un dossier de plus de 2 Go on va se faire planter par la limite de calcul à 2^31.
On doit alors avant le calcul limiter l'affichage de la taille en octets à 9 chiffres:
SET/A "SIZE9=%SIZE:~0,9%"
Si je veux pinailler à l'extrême et afficher le nombre avec des décimales, il va falloir en outre que je teste la longueur de la chaîne en octets pour appliquer le bon format de sortie après division selon par exemple qu'on est dans la tranche 1 à 10, 10 à 99 ou 100 à 999 Mo.
Pour ceux qui ne sont pas d'accord, essayez au hasard avec un dossier de 5,50 Go:
que je n'aurai a fortiori aucun moyen de diviser par 1024