IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Connaître taille dossier [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Par défaut Connaître taille dossier
    Bon allé je me (re)lance!

    J'vais essayer de faire court cette fois-ci (mes anciens posts étaient un poil longs!) mais là j'avoue que c'est mal parti! :/

    Bon : TOUT EST DANS LE TITRE !

    Je veux connaître la taille d'un dossier (comprenant plusieurs sous-dossiers) tous bien remplis de pleins de fichiers!
    Je mets mon code dans un .bat et je veux qu'il m'affiche la taille de ce que je lui demande.

    J'ai essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set /p repertoire="Chemin a entrer : "
    set /a cptfichiers=0
    set /a cptdossiers=0
    set /a cptjonctions=0
    set /a total=0
    for /f %%a in ('dir /s /b /a:-d %repertoire%\*.*') do set /a cptfichiers+=1
    for /f %%a in ('dir /s /b /a:d %repertoire%\*.*') do set /a cptdossiers+=1
    for /f %%a in ('dir /s /b /a:l %repertoire%\*.*') do set /a cptjonctions+=1
    echo %cptfichiers% fichiers %cptdossiers% dossiers %cptjonctions% jonctions
    Donc c'est grave cool je sais le nb de fichiers, le nb de dossiers et le nb de jonctions de mon repertoire! Et j'me dis j'suis sur la bonne voie!

    Puis j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    forfiles /p %repertoire% /s /m *.* /c "cmd /c echo @fsize & echo."
    Cool!! Il m'affiche la taille de chaque fichiers de mon repertoire! J'avance! =)

    Ensuite j'ai essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    forfiles /p %repertoire% /s /m *.* /c "cmd /c echo|set /p total=@fsize & echo. & echo|set /a total=%total%+@fsize"
    Et là je crois bien que je me mélange à fond les pinceaux vu que je ne connais pas la commande exacte!
    total=0 quoi qu'il arrive (j'ai testé plein plein de trucs!!)

    Au final, il faut faire quoi?
    - Additionner mes @fsize de forfiles ?
    - Faire une boucle for puis 'dir quelquechose' mais ce quelquechose je ne connais pas sa formulation exacte!
    - Planter une masse dans l'ordi?
    - Planter une masse dans l'écran?

    Need help plz!

    >>>>>>>>>>>>>>>>>> Merci d'avoir lu jusqu'ici!
    >>>>>>>>>>>>>>>>>> Merci à tous ceux/celles qui me répondront!

    Passez une agréable journée/soirée!

  2. #2
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Une méthode robuste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    @echo off&cls
    
    
    set /p "$rep=Nom du répertoire ? : "
    set /a $total=0
    
    setlocal enabledelayedexpansion
    for /f "delims=" %%a in ('dir /b /a-d /s  %$rep%') do  set /a $total=!$total!+ %%~za
    set /a $totalKb=!$total!/1024
    set /a $totalMb=!$totalKb!/1024
    
    
    
    Echo Total = [!$total!] Octets ==^> [!$totalKb!] Kb ==^> [!$totalMb!] Mb
    
    Pause >nul

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Par défaut Merci beaucoup
    Ok merci pour ta réponse rapide!

    Je vais manger et je test ça direct!

    J'ai l'impression de voir le Graal!

    Merci beaucoup!

    A tte!

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Par défaut Merci mais....
    Citation Envoyé par sachadee Voir le message
    Une méthode robuste : (code raccourcis : moins de saut de lignes)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off&cls
    set /p "$rep=Nom du répertoire ? : "
    set /a $total=0
    setlocal enabledelayedexpansion
    for /f "delims=" %%a in ('dir /b /a-d /s  %$rep%') do  set /a $total=!$total!+ %%~za
    set /a $totalKb=!$total!/1024
    set /a $totalMb=!$totalKb!/1024
    
    Echo Total = [!$total!] Octets ==^> [!$totalKb!] Kb ==^> [!$totalMb!] Mb
    Pause >nul
    Bon bon bon...

    Tout d'abord je tiens à te dire que j'ai une "erreur" : Il manque un opérande.
    Donc je sais pas, j'ai testé avec des "" après ton do set /a (set /a "$total=!$total!+ %%~za"), j'ai enlevé l'espace qu'il y'avait après le + (set /a $total=!$total!+%%~za), j'ai fais 2/3 ptits trucs mais sans succès! :/

    Ensuite, pleins de choses à te demander :
    - Pourquoi tu déclares tes variables avec des $ devant?? Ça change quoi?
    - Pourquoi tu mets "setlocal enabledelayedexpansion" et à quoi ça sert réellement?? Vraiment je ne comprends pas (j'ai regardé quelques sites dessus) et à part changer les %variables% en !variables! je ne vois pas la différence! :/ C'est pour un "traitement" différent de la variable??
    - Qu'est-ce que ça fait le "delims="??
    - 'dir /b /a-d /s %$rep%' veut bien dire : /b nom de fichiers raccourcis /s sous-répertoires /a-d ??? C'est attribut quoi??? C'est attribut-répertoire???
    - %%~za c'est ça la taille de chaque fichiers? Du coup pas de forfiles avec %%~za du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    forfiles /p %repertoire% /s /m *.* /c "cmd /c echo|set total=@fsize+%%~za"
    - Et finalement, question con mais, pour la conversion (octets=>Kb=>Mb), 1 octet = 1 byte ?! Aïe je sens que j'vais me faire taper là! :/

    Merci quand même de te soucier de mon problème, et j'espère ne pas être trop "embêtant"!

  5. #5
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Essaye ce code (j'ai oublié les " dans le dir) et essaye de tester avec le repertoire courant (%cd%)

    Et effectivement pour la conversion on peu simplifier de cette manière dans ce cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off&cls
    
    set /p "$rep=Nom du répertoire ? : "
    set /a $total=0
    setlocal enabledelayedexpansion
    for /f "delims=" %%a in ('dir /b /a-d /s  "%$rep%"') do  set /a $total=!$total!+%%~za
    
    
    Echo Total = [!$total!] Octets ==^> [!$total:~0,-3!] Kb ==^> [!$total:~0,-6!] Mb
    Pause >nul
    chez moi ça marche parfaitement !

    Pour le reste tu as les Helps des commandes simplement en faisant dir /? par exemple.



  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Par défaut
    Bon merci beaucoup sachadee, précis à l'octet près!

    Voilà mon code (45 lignes) pour ceux/celles que ça intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    :debut
    @echo off & cls
    set /p repertoire="Chemin a entrer : "
    set log=%userprofile%\Desktop
    set /a cptfichiers=0
    set /a cptdossiers=0
    set /a cptjonctions=0
    set /a totaloctets=0
    echo 1ere for (cptfichiers)
    for /f %%a in ('dir /s /b /a:-d "%repertoire%"\*.*') do set /a cptfichiers+=1
    echo 2eme for (cpt dossiers)
    for /f %%a in ('dir /s /b /a:d "%repertoire%"\*.*') do set /a cptdossiers+=1
    echo 3eme for (cptjonctions)
    for /f %%a in ('dir /s /b /a:l "%repertoire%"\*.*') do set /a cptjonctions+=1
    echo 5eme for (taille totale de sachadee)
    setlocal enabledelayedexpansion
    for /f "delims=" %%a in ('dir /b /a-d /s  "%repertoire%"') do  set /a totaloctets=!totaloctets!+ %%~za
    setlocal disabledelayedexpansion
    echo %cptfichiers% fichiers %cptdossiers% dossiers %cptjonctions% jonctions %totaloctets% octets
    echo.
    set /a tailleKo=%totaloctets%/1000
    set /a tailleMo=%totaloctets%/(1000*1000)
    set /a tailleKb=%totaloctets%/1024
    set /a tailleMb=%totaloctets%/(1024*1024)
    set /a nbdossiers=%cptdossiers%-%cptjonctions%
    echo Donc :
    echo %cptfichiers% fichiers 
    echo %cptdossiers%-%cptjonctions%=%nbdossiers% dossiers 
    echo %cptjonctions% jonctions 
    echo.
    echo %totaloctets% octets
    echo %tailleKo% Ko
    echo %tailleMo% Mo
    echo %tailleKb% Kb
    echo %tailleMb% Mb
    echo. >> %log%\logrenvoie.txt
    echo %repertoire% le %date% a %time% >> %log%\logrenvoie.txt
    echo %cptfichiers% fichiers %cptdossiers% dossiers %cptjonctions% jonctions %totaloctets% octets >> %log%\logrenvoie.txt
    echo.
    set /p go="Encore (o/n) ? "
    if /i "%go%"=="o" goto debut
    if /i "%go%"=="n" goto fin
    goto fin
    :fin
    exit
    Les lignes 9, 11, 13 et 15 sont là juste pour avoir une indication du temps de la boucle... A enlever si ça vous paraît inutile
    Merci pour votre aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Limite taille dossiers
    Par dosman dans le forum Thunderbird
    Réponses: 5
    Dernier message: 14/06/2012, 08h54
  2. Arboréscence + Taille Dossier dans fichier HTML
    Par forum dans le forum Vos Contributions VBScript
    Réponses: 1
    Dernier message: 24/05/2011, 11h34
  3. Connaître taille d'un fichier
    Par jouclar dans le forum Général Python
    Réponses: 2
    Dernier message: 30/04/2011, 21h44
  4. Connaître le dossier parent d'un fichier/dossier
    Par troubleshooting dans le forum C++
    Réponses: 14
    Dernier message: 31/07/2008, 11h22
  5. Commande SQL / connaître taille d'1 base
    Par Thomad dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/04/2005, 11h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo