Manipulation de chaine de caracteres [Résolu/Fermé]

Signaler
Messages postés
26
Date d'inscription
mercredi 22 octobre 2014
Statut
Membre
Dernière intervention
18 décembre 2014
-
Messages postés
18246
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 juillet 2021
-
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

Messages postés
26
Date d'inscription
mercredi 22 octobre 2014
Statut
Membre
Dernière intervention
18 décembre 2014

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.
Messages postés
18246
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 juillet 2021
5 330
hello
est-ce que ChaineDeCaractères ou Chiffres sont de même longueur pour chaque répertoire ?
Messages postés
26
Date d'inscription
mercredi 22 octobre 2014
Statut
Membre
Dernière intervention
18 décembre 2014

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.
Messages postés
26
Date d'inscription
mercredi 22 octobre 2014
Statut
Membre
Dernière intervention
18 décembre 2014

up

s'il vous plait
Messages postés
18246
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 juillet 2021
5 330
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%
Messages postés
26
Date d'inscription
mercredi 22 octobre 2014
Statut
Membre
Dernière intervention
18 décembre 2014

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.
Messages postés
18246
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 juillet 2021
5 330
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%
Messages postés
18246
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 juillet 2021
5 330
%1 est le 1er paramètre passé à cc
set t=%1
set txt=%1
Messages postés
26
Date d'inscription
mercredi 22 octobre 2014
Statut
Membre
Dernière intervention
18 décembre 2014

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
Messages postés
18246
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 juillet 2021
5 330
puisque for est exécuté en interactif, @ veut dire echo off
ren est une commande DOS, utiliser par ex. renomme.bat
Messages postés
26
Date d'inscription
mercredi 22 octobre 2014
Statut
Membre
Dernière intervention
18 décembre 2014

Merci beaucoup,

c'est niquel !!

Très bonne poursuite.

Xeep
Messages postés
18246
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 juillet 2021
5 330
on peut tout mettre dans 1 fichier .bat comme ça
@echo off
setlocal enableDelayedExpansion
for /D %%a in (*.*) do call :prog %%a
goto :eof
:prog
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%
goto :eof