Manipulation de chaine de caracteres

Résolu
Xeep Messages postés 27 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'aimerai pouvoir, avec un script, renommer une centaine de répertoires .

Ces répertoires sont composés de cette manière :

ChaineDeCaractèresChiffres

Les chaines de caractères sont différentes de répertoire en répertoire, et de même pour la serie de chiffres.

Le but est d'arriver à insérer un ( - ) comme suite :

ChaineDeCaractères-Chiffres

c'est à dire séparer les chiffres de la chaine.

Avez vous une idée ?

Merci.

Xeep

5 réponses

  1. Xeep Messages postés 27 Statut Membre
     
    pour arriver à travailler séquentiellement sur chaque répertoire, c'est ok.

    J'y arrive, c'est dans la partie insertion du " - " que ça bloque.

    Merci.
    0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    est-ce que ChaineDeCaractères ou Chiffres sont de même longueur pour chaque répertoire ?
    0
    1. Xeep Messages postés 27 Statut Membre
       
      non, ils ne sont pas de même longueur.

      j'ai pensé à extraire les chiffres, puis extraire les lettres et finalement les concaténer avec un tiret au milieux.

      Mais là encore, je bloque l'extraction.

      Merci.
      0
  3. Xeep Messages postés 27 Statut Membre
     
    up

    s'il vous plait
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    essayer ce code, à mettre dans une boucle avec le nom des répertoires
    je fais une boucle qui enlève un car. jusqu'à ce que le 1er car. soit un chiffre, j'ai alors la taille du texte.
    C:> cc
    texte ?abcdef1234
    ren abcdef1234 abcdef-1234
    C:>type cc.bat
    @echo off
    setlocal enableDelayedExpansion
    set /p txt=texte ?
    set t=%txt%
    set l=0
    :loop33
    echo %t% | findstr "^[0-9]" > NUL
    if !errorlevel! EQU 0 goto fin33
    set t=%t:~1%
    set /A l += 1
    goto loop33
    )
    :fin33
    echo ren %txt% !txt:~0,%l%!-%t%
    0
    1. Xeep Messages postés 27 Statut Membre
       
      Merci beaucoup, j'ai étudié votre code et je comprend votre logique.

      Savez vous comment intégrer ce code dans une boucle telle que celle ci :


      for /D %%a in (*.*) do [traitement]


      qui me permet de traverser tout le répertoire et d'appliquer le traitement (renommage avec le tiret) sur chacun des sous répertoires.

      Encore merci.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    j'arrive pas avec la boucle for dans le .bat
    essayer ca, enlever le echo devant ren si c'est ok
    C:>  for /D %a in (*.*) do @(cc %a)
    C:> type cc.bat
    @echo off
    setlocal enableDelayedExpansion
    set t=%1
    set txt=%1
    set l=0
    :loop33
    echo %t% | findstr "^[0-9]" > NUL
    if !errorlevel! EQU 0 goto fin33
    set t=%t:~1%
    set /A l += 1
    goto loop33
    :fin33
    echo ren %txt% !txt:~0,%l%!-%t%
    0
    1. Xeep Messages postés 27 Statut Membre
       
      j'ai mis dans un dossier 3 répertoires que je veux renommer :

      ABC123
      ABCD4566
      AZERTY78945

      dans ce dossier j'ai aussi mis le script ci-dessous :



      setlocal enableDelayedExpansion
      for /D %%a in (*.*) do (
      set t=%%a
      set txt=%%a
      set name=%%a
      set l=0
      :loop33
      echo %t% | findstr "^[0-9]" > NUL
      if !errorlevel! EQU 0 goto fin33
      set t=%t:~1%
      set /A l += 1
      goto loop33
      )
      :fin33
      ren %txt% !txt:~0,%l%!-%t%
      move %name% %txt%
      )


      le but est d'obtenir :

      ABC-123
      ABCD-4566
      AZERTY-78945

      mais ça me renomme que le premier rep et pas correctement en plus.

      Avez vous une idée ?


      Merci.
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      voir post 7
      la boucle for est exécutée manuellement en dehors du script
      0
    3. Xeep Messages postés 27 Statut Membre
       
      OK,

      Vous pouvez m'expliquer comment cc récupère le passage de paramètres %a ?

      Merci.
      0
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      %1 est le 1er paramètre passé à cc
      set t=%1
      set txt=%1
      0
    5. Xeep Messages postés 27 Statut Membre
       
      d'accord,

      Je suis désolé, encore deux questions ;)

      que veut dire cette syntaxe : @(cc %a) ?

      j'ai modifié le script cc.bat en ren.bat et j'ai modifier @(cc %a) en @(ren %a)

      mais ça n'a pas marché.

      Vous savez pourquoi ?

      Merci.

      Xeep
      0