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 :

Besoin d'être corrigé


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 112
    Par défaut Besoin d'être corrigé
    Bonjour à tous,

    Plus habitué au shell Linux, je ne m'en sors pas tout seul sur ce script batch que j'ai fait (avec mes petites connaissances et beaucoup de tâtonnements )...

    Voici le code :
    Code Batch : 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
    @echo off
    Setlocal EnableDelayedExpansion
    :: Renumérotation d'une série de dossiers de type "XXXXX" (exemples : 50, 00500, 00807, 1307, 123456789)
    :: en "PXXXXX" à 5 chiffres minimum (résultats des exemples : P00550, P01000, P01307, P123457289)
     
    for /F %%a in ('dir /ad /b') do (
    :: Listing des fichiers
    :: /ad = uniquement les répertoires
    :: /b = juste les noms, pas les détails
        set $nom=%%a
    	set $org=%%a
        echo AVANT trim : !$nom!
        :: on supprime tous les éventuels "0" en préfixe
        :trim
        if "!$nom:~0,1%!"=="0" (
    		set $nom=!$nom:~1!
            goto trim
        )
        echo APRES trim : !$nom!
        if !$nom! LSS 9999999999999999999 (
            :: Le nom du dossier est bien numérique
            :: On essaye de traiter que les dossiers dont le nom est un nombre
            echo TRAITEMENT DE !$nom!
            if !$nom! LSS 10000 (
                :: On ne rajoute des 0 devant que si le nombre contient au plus 4 chiffres
                set $nom=00000!$nom!
                set $nom=!$nom:~-5!
            )
            :: On rajoute un "P" devant
            echo AU FINAL : P!$nom!
            ren !$org! P!$nom!
        )
    )
    echo TRAITEMENT TERMINE

    Je rencontre 2 soucis :
    1. il ne traite que le premier dossier (qu'il renomme comme il faut)
    2. J'ai régulièrement ce message : "Le lecteur spécifié est introuvable."


    Voici une résultat affiché à l'écran :
    Le lecteur spécifié est introuvable.
    AVANT trim : 00500
    APRES trim : 500
    Le lecteur spécifié est introuvable.
    TRAITEMENT DE 500
    Le lecteur spécifié est introuvable.
    AU FINAL : P00500
    TRAITEMENT TERMINE
    Si quelqu'un peut me dire quoi faire pour ces deux points....
    Merci bien par avance !!!

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Peux tu décrire ton besoin ?

    Ton problème viens de l'étiquette :trim qui se trouve dans une boucle

    Quelques astuces

    Supprimer les 0 non significatifs
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET N=00036506
    SET /a N=1%N%-(11%N%-1%N%)/10
    36506

    Validation de chiffres
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo 005|findstr /R /C:"^[0-9]*$">nul&&echo CHIFFRE||echo PAS CHIFFRE
    CHIFFRE
     
    echo 0a05|findstr /R /C:"^[0-9]*$">nul&&echo CHIFFRE||echo PAS CHIFFRE
    PAS CHIFFRE

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 112
    Par défaut
    Bonjour @ericlm128,

    Merci pour ces astuces, je vais essayer d'en comprendre le code et l'intégrerai dans mon code !!!

    Mon besoin : J'ai un dossier qui pèse souvent plusieurs 10aines de Go. Il contient lui-même plusieurs milliers de dossiers dont l'immense majorité représente un nombre avec potentiellement des "0" devant.
    Le rôle de ce script est de reprendre tous ces dossiers numériques, et pour chacun :
    1. de supprimer les "0" en préfixes s'il y en a trop ou en rajouter s'il en manque afin d'obtenir des nombres sur au moins 5 chiffres.
    2. de rajouter enfin un "P" en préfixe de ce nombre


    Pour exemple, j'ai une série de dossiers comme celle-ci : 50, 00500, 000807, 1307, 123456789.
    Le but est d'obtenir respectivement ceci : P00050, P00500, P00807, P01307, P123456789.

    Mon soucis dans ce script est que :
    1. malgré ma boucle seul le premier dossier est traité
    2. j'ai régulièrement le message "Le lecteur spécifié est introuvable." (qui donc si j'ai bien compris est à cause de l'étiquette trim)

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Je ferais comme ceci

    Code batch : 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
    @echo off
    Setlocal EnableDelayedExpansion
     
    REM récupère les dossiers numériques
    for /F %%a in ('dir /ad /b^|findstr /R /C:"^[0-9]*$"') do (
     
    	REM Supprime les 0 inutiles
    	for /f "tokens=* delims=0" %%b in ("%%~na") do set "var=%%~b"
    	if not defined var set "var=0"
     
    	REM Complète de 0
    	if !var! LSS 10000 set "var=00000!var!"&set "var=!var:~-5!"
     
    	REM Ajoute le préfixe P
    	set "var=P!var!"
     
    	REM Renomme le dossier
    	if exist "!var!" (echo Dossier deja existant "!var!") else ren "%%~na" "!var!"
    )
     
    pause

    PS : J'ai modifier la méthode de suppression des 0 qui était trop limité (32 bits)

Discussions similaires

  1. Décallage qui peut-être corrigé dans MySQL ?
    Par Kenshin86 dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/04/2007, 17h48
  2. Besoin d'être sûr de ma RegExp
    Par Arioch dans le forum Langage
    Réponses: 16
    Dernier message: 18/06/2006, 12h31
  3. [Débutant] Besoin d'être guidé dans l'utilisation d'XML
    Par jppaysan dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 28/04/2006, 11h19
  4. [débutant] besoin d'être éclairci.
    Par Fabouney dans le forum Applets
    Réponses: 1
    Dernier message: 04/10/2005, 05h13

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