Manipulation de chaine de caracteres

Résolu
Xeep Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 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
A voir également:

5 réponses

Xeep Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
est-ce que ChaineDeCaractères ou Chiffres sont de même longueur pour chaque répertoire ?
0
Xeep Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
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
Xeep Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
up

s'il vous plait
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
Xeep Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
Xeep Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
voir post 7
la boucle for est exécutée manuellement en dehors du script
0
Xeep Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
OK,

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

Merci.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
%1 est le 1er paramètre passé à cc
set t=%1
set txt=%1
0
Xeep Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
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