Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 2 sur 2
Aller à la page: <  1, 2
Compter les caractères d'une arborescence de dossiers.
Auteur Message
Répondre en citant
Message Compter les caractères d'une arborescence de dossiers. 
Revue du message précédent :

Parfait merci beaucoup Wink

Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message Compter les caractères d'une arborescence de dossiers. 
Isalou a écrit:
Isalou a écrit:
Bonjour,

Je reviens vers vous car j'ai essayé beaucoup de chose (création de variable, changement de code....) j'y suis depuis plus d'un mois et je ne trouve pas la solution.

Avec le script de Sacchadée : j'ai réussi à sortir le résultat voulu dans un fichier texte.
Code:
 @echo off
setlocal enabledelayedexpansion
for /f  "delims=" %%a in ('dir /s/ad/b') do call:compte "%%a"
exit /b
:compte
Set $Tstring=%~1
for /l %%b in (0,1,9000) do (
  set $t=!$Tstring:~%%b,1!
  if not defined $t (
      echo %1 =  %%b caracteres
      pause
      exit /b))



J'ai réussi à sortir le résultat dans un fichier texte. Mais je voudrais faire un tri.

Exemple :

L'arborescence de plus de 250 caractères dois s'écrire dans un fichier texte 1
Celle entre 200 et 250 dans un fichier 2
et ignorer donc vers un NULL celle de moins de 200 caractères.

Je sais que je dois faire avec IF variable (condition) mais je n'arrive pas à formuler correctement ou placer au bon endroit dans le code.

Je vous remercie par avance de m'aider à sortir de cette problématique.

Je suis vraiment pas douée en batch Sad



J'ai trouvé. Juste une erreur de parenthèses.
Bonne soirée à tous




bonjour,
je m'excuse de déterrer le sujet

car il s'agit de la fonction que je recherche
mais au lieu de générer un TXT, celui ci reste dans une fenetre CMD sur lequel je doit appuyer sur ENTER à chaque fois

serais il possible de generer le fichier TXT automatiquement ?

merci



Répondre en citant
Message Compter les caractères d'une arborescence de dossiers. 
Salut,

tu peux faire un truc comme ça Wink

Code:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%A in ('dir /b /s') do (
   for /f "tokens=1,* delims=[,]" %%B in ('"%comspec% /u /c echo:%%A|more|find /n /v """') do set /a length=%%B-4
   if !length! GTR 255 (
      echo %%A >> plus-que-255.txt
      ) else (
      echo %%A >> moins-que-255.txt
      )
   )






______________________________________________________


L'ignorance est un fléau qui engendre la haine et la mort
La connaissance est une arme qui surpasse toutes les autres
Partagez votre savoir, sinon il sera perdu à jamais
Répondre en citant
Message Compter les caractères d'une arborescence de dossiers. 
celui ci compte comme je souhaite

mais n'ayant pas besoin des fichiers, serait il possible de ne lui faire compter que les dossiers ?

juste un fichier TXT
chaine de + de 220 caracteres ( juste les dossiers , pas des fichiers )
hypothetiquement qu'il m'indique en début de chaque ligne le nombre de celle ci


cdt



Répondre en citant
Message Compter les caractères d'une arborescence de dossiers. 
Re, avec le commutateur /A de DIR tu aurais pu t'en sortir tout seul avec quelques recherches Wink
voici ce que tu recherche, @+:
Code:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%A in ('dir /A:D /b /s') do (
   for /f "tokens=1,* delims=[,]" %%B in ('"%comspec% /u /c echo:%%A|more|find /n /v """') do set /a length=%%B-4
   if !length! GTR 220 (
      set /a CNT+=1
      echo !length!_%%A >> plus-que-220.txt
      )
   )
rem optionnel:
echo %CNT% dossiers >> plus-que-220.txt





______________________________________________________


L'ignorance est un fléau qui engendre la haine et la mort
La connaissance est une arme qui surpasse toutes les autres
Partagez votre savoir, sinon il sera perdu à jamais
Répondre en citant
Message Compter les caractères d'une arborescence de dossiers. 
Merci
cela fonctionne comme je souhaite

juste 2 petites modif :


- retirer simplement le filtrage de 220 caractères :
--------Lister l'ensemble des chemins d'acces quelque soit leur longueur car le tri seras réaliser ultérieurement dans Excel car la feuille peux être interprété comme une feuille CSV

- mettre ; au lieu de _
--------Car cela est directement reconnu comme un caractères de feuille CSV )



Répondre en citant
Message Compter les caractères d'une arborescence de dossiers. 
takius a écrit:
Merci
cela fonctionne comme je souhaite

juste 2 petites modif :


- retirer simplement le filtrage de 220 caractères :
--------Lister l'ensemble des chemins d'acces quelque soit leur longueur car le tri seras réaliser ultérieurement dans Excel car la feuille peux être interprété comme une feuille CSV

- mettre ; au lieu de _
--------Car cela est directement reconnu comme un caractères de feuille CSV )


voilà :
Code:
@echo off
setlocal enabledelayedexpansion
set $fileOutput=ton_fichier.csv
type nul > "%$fileOutput%"
for /f "tokens=*" %%A in ('dir /A:D /b /s') do (
    call :length "%%~A" length
    echo;!length!;%%A >> "%$fileOutput%"
    echo;!length!;%%A
)
echo;
echo;End..
pause>nul
exit
:length <String> <Output>
    set "s=%~1#"
    set "len=0"
    for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
        if "!s:~%%P,1!" NEQ "" (
            set /a "len+=%%P"
            set "s=!s:~%%P!"
        )
    )
    set "%~2=!len!"
Exit /b





______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message Compter les caractères d'une arborescence de dossiers. 
Juste Merci
j'ai pu raccourcir mon arborescence pour le plus long maintenant, de 230 caracteres environ à 180 environ maintenant


dans ton message précédent, peux tu juste editer 2 brindilles
- Enregistrer en TXT , et non en CSV ( bien que je l'ai cité ) car Excel me propose une fenetre d'assistant ( non dispo si déjà en CSV )
- pour le fun, ajouter en bas du fichier généré le nombre de dossier total






cette assistant me permets de choisir mes séparateurs
Soit le POINT VIRGULE ( comme modifié précédemment ) et le ANTISLASH ( "bizarrement" contenu dans le chemin d'acces ) pour faire un Sous dossier par colonne




par contre, j'ai encore quelque bug de fichier qui ne s'ouvre pas, sans en connaitre la réponse ( par contre du PDF à chaque fois )
et je te sollicite pour que dans ta prochaine réponse , il y ai le bout de code ( le même ) qui inclus les Fichiers ( peux être une limite de 200 pour Adobe )



Répondre en citant
Message Compter les caractères d'une arborescence de dossiers. 
takius a écrit:
Juste Merci
j'ai pu raccourcir mon arborescence pour le plus long maintenant, de 230 caracteres environ à 180 environ maintenant


dans ton message précédent, peux tu juste editer 2 brindilles
- Enregistrer en TXT , et non en CSV ( bien que je l'ai cité ) car Excel me propose une fenetre d'assistant ( non dispo si déjà en CSV )
- pour le fun, ajouter en bas du fichier généré le nombre de dossier total



Avec les messages précédents et une petit analyse des codes tu aurais pu faire ça très très facilement tout seul



Donc on va faire une mini analyse du code que j'ai posté, donc on peut voir au début que je déclare une variable :
Code:
set $fileOutput=ton_fichier.csv

Avec un minimum d'observation, on peut voir que l'on met dans cette variable le nom du fichier où l'on met le contenu.
Donc si l'on souhaite un fichier avec l'extension txt à la place de csv, il suffit d'arranger cette partie du code comme cela :
Code:
set $fileOutput=ton_fichier.txt



Ensuite on a cette ligne :
Code:
type nul > "%$fileOutput%"

Cette dernière permet de supprimer tout le contenu du fichier.


Puis, enfin on arrive à la boucle for, donc si on veut afficher le nombre de dossier à la fin.
Avec l'aide du code précédent, il suffit d'incrémenter une variable de 1 dans la boucle for.
Donc il suffit d'ajouter cette ligne dans la boucle for :
Code:
set /a $nb+=1

Et à la fin, après la boucle for, il suffit d'ajouter cette ligne pour l'ajouter au fichier :
Code:
echo;!$nb! dossiers >> "%$fileOutput%"



Donc ce qui donne au final :
Code:
@echo off
setlocal enabledelayedexpansion
set $fileOutput=ton_fichier.txt
type nul > "%$fileOutput%"
for /f "tokens=*" %%A in ('dir /A:D /b /s') do (
    set /a $nb+=1
    call :length "%%~A" length
    echo;!length!;%%A >> "%$fileOutput%"
    echo;!length!;%%A
)
echo;
echo;!$nb! dossiers >> "%$fileOutput%"
echo;!$nb! dossiers
echo;End..
pause>nul
exit
:length <String> <Output>
    set "s=%~1#"
    set "len=0"
    for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
        if "!s:~%%P,1!" NEQ "" (
            set /a "len+=%%P"
            set "s=!s:~%%P!"
        )
    )
    set "%~2=!len!"
Exit /b



Code:
et je te sollicite pour que dans ta prochaine réponse , il y ai le bout de code ( le même ) qui inclus les Fichiers ( peux être une limite de 200 pour Adobe )

Si tu veux une limite de 200, il suffit de s'aider des codes précédents, avec un simple if (que l'on met dans la boucle for) comme ça :
Code:
if !length! leq 200 (
rem ...le code...
)


Ce qui donne au final :
Code:
@echo off
setlocal enabledelayedexpansion
set $fileOutput=ton_fichier.txt
type nul > "%$fileOutput%"
for /f "tokens=*" %%A in ('dir /A:D /b /s') do (
    call :length "%%~A" length
    if !length! leq 200 (
        set /a $nb+=1
        echo;!length!;%%A >> "%$fileOutput%"
        echo;!length!;%%A
    )
)
echo;
echo;!$nb! dossiers >> "%$fileOutput%"
echo;!$nb! dossiers
echo;End..
pause>nul
exit
:length <String> <Output>
    set "s=%~1#"
    set "len=0"
    for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
        if "!s:~%%P,1!" NEQ "" (
            set /a "len+=%%P"
            set "s=!s:~%%P!"
        )
    )
    set "%~2=!len!"
Exit /b





______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Message Compter les caractères d'une arborescence de dossiers. 


Montrer les messages depuis:
Répondre au sujet Page 2 sur 2
Aller à la page: <  1, 2
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch