Manipulation de chaine de caracteres

Résolu/Fermé
Xeep Messages postés 26 Date d'inscription mercredi 22 octobre 2014 Statut Membre Dernière intervention 18 décembre 2014 - Modifié par Xeep le 15/12/2014 à 14:46
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 - 19 déc. 2014 à 08:58
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 mercredi 22 octobre 2014 Statut Membre Dernière intervention 18 décembre 2014
15 déc. 2014 à 14:48
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 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
15 déc. 2014 à 15:24
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 mercredi 22 octobre 2014 Statut Membre Dernière intervention 18 décembre 2014
15 déc. 2014 à 16:41
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 mercredi 22 octobre 2014 Statut Membre Dernière intervention 18 décembre 2014
16 déc. 2014 à 12:02
up

s'il vous plait
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
Modifié par dubcek le 16/12/2014 à 13:09
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 mercredi 22 octobre 2014 Statut Membre Dernière intervention 18 décembre 2014
16 déc. 2014 à 15:14
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 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
Modifié par dubcek le 16/12/2014 à 15:53
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 mercredi 22 octobre 2014 Statut Membre Dernière intervention 18 décembre 2014
16 déc. 2014 à 16:39
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 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
16 déc. 2014 à 16:51
voir post 7
la boucle for est exécutée manuellement en dehors du script
0
Xeep Messages postés 26 Date d'inscription mercredi 22 octobre 2014 Statut Membre Dernière intervention 18 décembre 2014
18 déc. 2014 à 11:11
OK,

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

Merci.
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
18 déc. 2014 à 12:28
%1 est le 1er paramètre passé à cc
set t=%1
set txt=%1
0
Xeep Messages postés 26 Date d'inscription mercredi 22 octobre 2014 Statut Membre Dernière intervention 18 décembre 2014
18 déc. 2014 à 14:14
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