Remodeler les dossiers en fonction de leurs noms
Fermé
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
-
8 déc. 2013 à 14:59
Matt 666 Messages postés 38 Date d'inscription jeudi 7 mars 2013 Statut Membre Dernière intervention 28 octobre 2020 - 19 mars 2016 à 12:15
Matt 666 Messages postés 38 Date d'inscription jeudi 7 mars 2013 Statut Membre Dernière intervention 28 octobre 2020 - 19 mars 2016 à 12:15
A voir également:
- Remodeler les dossiers en fonction de leurs noms
- Fonction si et - Guide
- Les noms des animaux - Télécharger - Études & Formations
- Fonction moyenne excel - Guide
- Mettre un mot de passe sur un dossier - Guide
- Durée de fonctionnement processeur ✓ - Forum Windows 10
16 réponses
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
8 déc. 2013 à 16:07
8 déc. 2013 à 16:07
hello
le point de séparation entre Return to forever [UK](1977) Musicmagic et Return to forever [UK] c'est une (
est-ce que c'est toujours vrai ?
le point de séparation entre Return to forever [UK](1977) Musicmagic et Return to forever [UK] c'est une (
est-ce que c'est toujours vrai ?
C:> for /f "delims=( tokens=1,2" %a in ("Return to forever [UK](1977) Musicmagic") do @echo %a&@echo (%b
Return to forever [UK]
(1977) Musicmagic
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
8 déc. 2013 à 16:50
8 déc. 2013 à 16:50
Salut ! Merci pour le boulot !! Vache...
C'est quoi comme programmation ? C ? DOS ? Ptet que C et DOS c'est pareil, ah aha..
De ce que je vois, ce dossier n'en est qu'un parmi tant d'autres, du coup faudrait plutôt une variable que d'écrire le nom du dossier en dur..
Le point de séparation serait plutôt ]( que seulement ( c'est possible ? Et là oui c'est toujours vrai ! Après si on peut mettre une sécurité du genre "s'il ne trouve pas de "[" ET "]" ne pas faire le dossier ?
Et sinon le but serait de mettre tout ça dans un fichier BAT, et que je le lance à l'emplacement des dossiers parents (ceux avec le point de séparation "](" ) comment faire pour qu'il passe en revue tous les dossiers de l'emplacement ?
Et avec ce pti bout de code il déplace les fichiers de "Return to forever [UK](1977) Musicmagic" dans "Return to forever [UK]\(1977) Musicmagic" ?
C'est quoi comme programmation ? C ? DOS ? Ptet que C et DOS c'est pareil, ah aha..
De ce que je vois, ce dossier n'en est qu'un parmi tant d'autres, du coup faudrait plutôt une variable que d'écrire le nom du dossier en dur..
Le point de séparation serait plutôt ]( que seulement ( c'est possible ? Et là oui c'est toujours vrai ! Après si on peut mettre une sécurité du genre "s'il ne trouve pas de "[" ET "]" ne pas faire le dossier ?
Et sinon le but serait de mettre tout ça dans un fichier BAT, et que je le lance à l'emplacement des dossiers parents (ceux avec le point de séparation "](" ) comment faire pour qu'il passe en revue tous les dossiers de l'emplacement ?
Et avec ce pti bout de code il déplace les fichiers de "Return to forever [UK](1977) Musicmagic" dans "Return to forever [UK]\(1977) Musicmagic" ?
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
9 déc. 2013 à 09:29
9 déc. 2013 à 09:29
c'est du DOS pour fichier .bat
il ne fait que montrer la coupure d'un texte (nom de fichier, variable, etc)
les noms de fichiers peuvent être récupérés par une boucle,
le séparateur ne peut être qu'un seul caractère.
oui, on peut tester la présence de ][
montre une série de noms, pour tester.
il ne fait que montrer la coupure d'un texte (nom de fichier, variable, etc)
les noms de fichiers peuvent être récupérés par une boucle,
le séparateur ne peut être qu'un seul caractère.
oui, on peut tester la présence de ][
montre une série de noms, pour tester.
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
Modifié par Matt 666 le 9/12/2013 à 10:09
Modifié par Matt 666 le 9/12/2013 à 10:09
Allez zou, série de noms (avec des pièges sinon c'est pas drôle ! ^^) :
Heart of a Coward [](2013) Severance
Tycho [](2012) Dive [Deluxe Version] (vu que le séparateur est )[ ça ne devrait pas poser de pbs)
Zombi - (2009) Spirit Animal (normalement il ne devrait pas toucher à celui ci)
GARRETT Kenny [US](2013) Pushing The World Away
Blacklisters [](2012) BLKLSTRS
Culture [US]() Deforestation
PETRAKIS Stelios [], Bijan Chemirani [](2003) Kismet
Badume's Band & Selamnesh Zemene [](2011) Ale Gena Ethiopia
ASTATKE Mulatu [ET] (celui ci est déjà "formaté" et du coup il ne devrait pas y toucher)
En tout cas merci c'est vraiment cool !
Juste comme ça, c'est pas plutôt un for /d qu'il faut utiliser pour les dossiers ?
Ah oui, comment tu fais pour mettre ton code juste en gris comme ça ? avec la balise <code*> il met les parenthèses d'une autre couleur.
Heart of a Coward [](2013) Severance
Tycho [](2012) Dive [Deluxe Version] (vu que le séparateur est )[ ça ne devrait pas poser de pbs)
Zombi - (2009) Spirit Animal (normalement il ne devrait pas toucher à celui ci)
GARRETT Kenny [US](2013) Pushing The World Away
Blacklisters [](2012) BLKLSTRS
Culture [US]() Deforestation
PETRAKIS Stelios [], Bijan Chemirani [](2003) Kismet
Badume's Band & Selamnesh Zemene [](2011) Ale Gena Ethiopia
ASTATKE Mulatu [ET] (celui ci est déjà "formaté" et du coup il ne devrait pas y toucher)
En tout cas merci c'est vraiment cool !
Juste comme ça, c'est pas plutôt un for /d qu'il faut utiliser pour les dossiers ?
Ah oui, comment tu fais pour mettre ton code juste en gris comme ça ? avec la balise <code*> il met les parenthèses d'une autre couleur.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
Modifié par dubcek le 9/12/2013 à 15:29
Modifié par dubcek le 9/12/2013 à 15:29
for /F c'est pour analyser une chaine, et effectivement for /D pour afficher les dossiers
c'est une balise code simple, cliquer sur <> ce qui génère <code></code>
je teste
c'est une balise code simple, cliquer sur <> ce qui génère <code></code>
je teste
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
9 déc. 2013 à 19:07
9 déc. 2013 à 19:07
ok d'ac merci !
Impatient de voir le résultat ! En plus ca va me faire un début pour tenter la prog en DOS ! Cool !
Impatient de voir le résultat ! En plus ca va me faire un début pour tenter la prog en DOS ! Cool !
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
10 déc. 2013 à 09:59
10 déc. 2013 à 09:59
soit ta liste de répertoires voila ce que ferait le script dd, 2 répertoires ne sont pas touchés, les autres sont renommés et un sous-répertoire créé.
C:> dir /b
ASTATKE Mulatu [ET]
Badume's Band ^& Selamnesh Zemene [](2011) Ale Gena Ethiopia
Blacklisters [](2012) BLKLSTRS
Culture [US]() Deforestation
GARRETT Kenny [US](2013) Pushing The World Away
PETRAKIS Stelios [], Bijan Chemirani [](2003) Kismet
Tycho [](2012) Dive [Deluxe Version]
Zombi - (2009) Spirit Animal
C:>
C:> ..\dd
pas touche : ASTATKE Mulatu [ET]
rename "Badume's Band ^& Selamnesh Zemene [](2011) Ale Gena Ethiopia" "Badume's Band ^& Selamnesh Zemene []"
md "Badume's Band ^& Selamnesh Zemene []\(2011) Ale Gena Ethiopia"
rename "Blacklisters [](2012) BLKLSTRS" "Blacklisters []"
md "Blacklisters []\(2012) BLKLSTRS"
rename "Culture [US]() Deforestation" "Culture [US]"
md "Culture [US]\() Deforestation"
rename "GARRETT Kenny [US](2013) Pushing The World Away" "GARRETT Kenny [US]"
md "GARRETT Kenny [US]\(2013) Pushing The World Away"
rename "PETRAKIS Stelios [], Bijan Chemirani [](2003) Kismet" "PETRAKIS Stelios [], Bijan Chemirani[]"
md "PETRAKIS Stelios [], Bijan Chemirani []\(2003) Kismet"
rename "Tycho [](2012) Dive [Deluxe Version]" "Tycho []"
md "Tycho []\(2012) Dive [Deluxe Version]"
pas touche : Zombi - (2009) Spirit Animal
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
10 déc. 2013 à 11:05
10 déc. 2013 à 11:05
le script
@echo off
setlocal enableDelayedExpansion
for /d %%a in (*.*) do (
echo %%a | findstr /l "](" > NUL
set err=!errorlevel!
if !err! EQU 0 (
for /f "delims=( tokens=1,2" %%b in ("%%a") do (
echo rename "%%a" "%%b"
echo md "%%b\(%%c"
)
) else (
echo pas touche : %%a
)
echo.
)
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
10 déc. 2013 à 12:10
10 déc. 2013 à 12:10
Salut ! Merciii ! Grosse balle !
Ben écoute j'ai essayé sur un répertoire en rajoutant
Sauf qu'il ne le fait pas ! Même en admin, c'est ptet normal je ne sais pas. Ptet les
Ben écoute j'ai essayé sur un répertoire en rajoutant
pauseà la fin pour voir un peu ce qui se tramait, et les messages sont bons, à chaque fois qu'il doit renommer il note qu'il le fait.
Sauf qu'il ne le fait pas ! Même en admin, c'est ptet normal je ne sais pas. Ptet les
echoqu'il faut virer mais vu que je n'y connais rien je préfère que tu confirmes... Chez toi les dossiers sont renommés ?
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
Modifié par dubcek le 10/12/2013 à 13:01
Modifié par dubcek le 10/12/2013 à 13:01
tout à fait, les echo affichent ce qu'il ferait sans agir.
en enlevant les echo, il va effectuer le rename et le md
ne pas enlever celui avec pas touche...
enlever ces 2 echo
en enlevant les echo, il va effectuer le rename et le md
ne pas enlever celui avec pas touche...
enlever ces 2 echo
echo rename "%%a" "%%b"
echo md "%%b\(%%c"
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
Modifié par Matt 666 le 10/12/2013 à 13:52
Modifié par Matt 666 le 10/12/2013 à 13:52
D'ac c'est parfait ! Merci !
Par contre les fichiers dans le dossier Return to forever [UK](1977) Musicmagic se retrouvent dans le dossier Return to forever [UK] et pas dans le sous dossier (1977) Musicmagic !
Tu vois ce que je veux dire ?
Ah oui aussi ! Imaginons ceci (parce que ça VA arriver ^^) :
Un dossier Do you compute [FR](2007) Turnstile et juste en dessous un autre dossier Do you compute [FR](2008) And we are the winners. Donc un potentiel de risque puisque 2 dossiers Do you compute [FR] après renommage.
Que se passe t-il dans ce cas ?
Par contre les fichiers dans le dossier Return to forever [UK](1977) Musicmagic se retrouvent dans le dossier Return to forever [UK] et pas dans le sous dossier (1977) Musicmagic !
Tu vois ce que je veux dire ?
Ah oui aussi ! Imaginons ceci (parce que ça VA arriver ^^) :
Un dossier Do you compute [FR](2007) Turnstile et juste en dessous un autre dossier Do you compute [FR](2008) And we are the winners. Donc un potentiel de risque puisque 2 dossiers Do you compute [FR] après renommage.
Que se passe t-il dans ce cas ?
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
Modifié par dubcek le 10/12/2013 à 14:51
Modifié par dubcek le 10/12/2013 à 14:51
pour le 1er cas, on rajoute un move
for /f "delims=( tokens=1,2" %%b in ("%%a") do (pour le 2ème cas, effectivement on peut rajouter un nombre au nom du répertoire ?
rename "%%a" "%%b"
md "%%b\(%%c"
move /Y "%%b\*.mp3" "%%b\(%%c"
)
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
Modifié par Matt 666 le 10/12/2013 à 20:00
Modifié par Matt 666 le 10/12/2013 à 20:00
Alors !
Je pense que ça fonctionne, mais juste une petite question comme ça :
Prenons le cas Do you compute [FR](2007) Turnstile.
Ne serait-ce pas plus simple de faire comme ça :
1- Vérifier s'il existe déjà un dossier Do you compute [FR] dans les dossiers existants
1a) Si non, créer le dossier Do you compute [FR] et déplacer le dossier
1b) Si oui, déplacer le dossier Do you compute [FR](2007) Turnstile dans le dossier Do you compute [FR] existant
2- Renommer le dossier Do you compute [FR](2007) Turnstile en (2007) Turnstile.
Est-ce possible et plus simple ? Comme ça la condition est incorporée pour le cas 2 !
Je t'ai envoyé un plus gros exemple de noms de dossiers en MP.
Je pense que ça fonctionne, mais juste une petite question comme ça :
Prenons le cas Do you compute [FR](2007) Turnstile.
Ne serait-ce pas plus simple de faire comme ça :
1- Vérifier s'il existe déjà un dossier Do you compute [FR] dans les dossiers existants
1a) Si non, créer le dossier Do you compute [FR] et déplacer le dossier
1b) Si oui, déplacer le dossier Do you compute [FR](2007) Turnstile dans le dossier Do you compute [FR] existant
2- Renommer le dossier Do you compute [FR](2007) Turnstile en (2007) Turnstile.
Est-ce possible et plus simple ? Comme ça la condition est incorporée pour le cas 2 !
Je t'ai envoyé un plus gros exemple de noms de dossiers en MP.
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
Modifié par Matt 666 le 10/12/2013 à 23:24
Modifié par Matt 666 le 10/12/2013 à 23:24
Arf je tente dans mon coin et je ne suis pas loin...
J'ai juste un pb avec la commande findstr...
Je te montre d'abord le code :
Ya 3 conditions :
- L'une de trouver ](
- Ensuite de voir s'il existe déjà un dossier avec le même nom de groupe
- Puis de voir s'il existe déjà un dossier avec le même nom d'album (dans les dossiers existants et tous les sous dossiers).
Dans les deux dernières conditions, j'utilise la commande findstr pour savoir s'il existe des dossiers du même nom que les dossiers qui seront créés plus tard. Le problème c'est que je n'arrive pas à faire une recherche "exactement".
En imaginant qu'un dossier Do you compute [FR] existe déjà en vrai, et bien je n'arrive pas à le trouver via le programme. A cause de findstr. Evidemment c'est pareil pour le nom de l'album..
Ca m'énerve je ne suis pas loin du tout là !! ^^
J'ai juste un pb avec la commande findstr...
Je te montre d'abord le code :
@echo off
setlocal enableDelayedExpansion
for /d %%a in (*.*) do (
echo %%a | findstr /l "](" > NUL
set err=!errorlevel!
if !err! EQU 0 (
for /f "delims=( tokens=1,2" %%b in ("%%a") do (
for /d %%d in (*.*) do (
echo %%a
echo %%b
echo (%%c
echo %%d | findstr /l /x /i "%%b" > NUL
set err2=!errorlevel!
echo %%d | findstr /s /l /x /i "(%%c" > NUL
set err3=!errorlevel!
if !err2! EQU 0 (
if !err3! EQU 0 (
echo groupe oui / album oui
rename "%%d" "%%d BIS"
rename "%%a" "(%%c"
move /Y "%%d BIS" "%%b"
move /Y "(%%c" "%%b"
) else (
echo groupe oui / album non
rename "%%a" "(%%c"
move /Y "(%%c" "%%b"
)
) else (
if !err3! EQU 0 (
echo groupe non / album oui
md "%%b"
rename "%%d" "%%d BIS"
rename "%%a" "(%%c"
move /Y "%%d BIS" "%%b"
move /Y "(%%c" "%%b"
) else (
echo groupe non / album non
echo md "%%b"
echo rename "%%a" "(%%c"
echo move /Y "(%%c" "%%b"
)
)
)
)
) else (
echo pas touche : %%a
)
echo.
)
pause
Ya 3 conditions :
- L'une de trouver ](
- Ensuite de voir s'il existe déjà un dossier avec le même nom de groupe
- Puis de voir s'il existe déjà un dossier avec le même nom d'album (dans les dossiers existants et tous les sous dossiers).
Dans les deux dernières conditions, j'utilise la commande findstr pour savoir s'il existe des dossiers du même nom que les dossiers qui seront créés plus tard. Le problème c'est que je n'arrive pas à faire une recherche "exactement".
En imaginant qu'un dossier Do you compute [FR] existe déjà en vrai, et bien je n'arrive pas à le trouver via le programme. A cause de findstr. Evidemment c'est pareil pour le nom de l'album..
Ca m'énerve je ne suis pas loin du tout là !! ^^
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
Modifié par dubcek le 11/12/2013 à 10:32
Modifié par dubcek le 11/12/2013 à 10:32
essayer sans le /x du findstr
essayer set err2=!errorlevel! (ou err3) avec %errorlevel% plutot que !
for /d récupère les répertoires uniquement dans le répertoire courant, il ne descend pas l'arborescence
essayer set err2=!errorlevel! (ou err3) avec %errorlevel% plutot que !
for /d récupère les répertoires uniquement dans le répertoire courant, il ne descend pas l'arborescence
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
11 déc. 2013 à 11:16
11 déc. 2013 à 11:16
Ben le pb c'est que quand j'essaye sans /x il trouve le dossier Do you compute [FR] ET aussi tous les dossiers avec un you, ou un Do, ou un compute.. Ca en fait un paquet quoi ah aha !
J'ai essayé %errorlevel% et du coup la condition est OUI tout le temps, il accepte tout... Ahem..
Ah oui effectivement for /d est embétant, ya pas de possibilité de vérifier les sous dossiers ?
J'ai essayé %errorlevel% et du coup la condition est OUI tout le temps, il accepte tout... Ahem..
Ah oui effectivement for /d est embétant, ya pas de possibilité de vérifier les sous dossiers ?
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
11 déc. 2013 à 14:18
11 déc. 2013 à 14:18
ou utiliser if exist, puisqu'on a le nom du sous-dossier
...
echo %%a | findstr /l "](" > NUL
set err=!errorlevel!
if !err! EQU 0 (
for /f "delims=( tokens=1,2" %%b in ("%%a") do (
set nom=%%b
if exist "!nom!" echo le sous dossier !nom! existe
......
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
11 déc. 2013 à 14:56
11 déc. 2013 à 14:56
pour afficher tout les sous répertoires depuis là ou on est
for /R . %%a in (.) do @echo %%a
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
Modifié par Matt 666 le 11/12/2013 à 23:35
Modifié par Matt 666 le 11/12/2013 à 23:35
Coool merci ! bon voilà finit !
C'est vraiment cool ça me permet de mettre un pied dans le DOS !
Voilà le pg tel qu'il est, si certains en ont besoin (ça m'étonnerait mais bon !) :
C'est vraiment cool ça me permet de mettre un pied dans le DOS !
Voilà le pg tel qu'il est, si certains en ont besoin (ça m'étonnerait mais bon !) :
@echo offEncore Merci Dubcek, hyper sympa de ta part ! ^^
setlocal enableDelayedExpansion
for /d %%a in (*.*) do (
echo %%a | findstr /l "](" > NUL
set err=!errorlevel!
if !err! EQU 0 (
for /f "delims=( tokens=1,2" %%b in ("%%a") do (
for /d %%d in (.) do (
set groupe=%%b
set album="(%%c"
set albumexistant=0
for /r %%e in (.) do (
if exist "!album!" set albumexistant=1
)
if exist "!groupe!" (
if !albumexistant! EQU 1 (
rename "%%a" "(%%c_BIS"
move /Y "(%%c_BIS" "%%b"
echo Album !album! renomme en (!album!_BIS et deplace dans Groupe !groupe!.
) else (
rename "%%a" "(%%c"
move /Y "(%%c" "%%b"
echo Album !album! deplace dans Groupe !groupe!.
)
) else (
md "%%b"
if !albumexistant! EQU 1 (
rename "%%a" "(%%c_BIS"
move /Y "(%%c_BIS" "%%b"
echo Album !album! renomme en (!album!_BIS et deplace dans nouveau Groupe !groupe!.
) else (
rename "%%a" "(%%c"
move /Y "(%%c" "%%b"
echo Album !album! deplace dans nouveau Groupe !groupe!.
)
)
)
)
)
echo.
)
pause
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
Modifié par Matt 666 le 5/03/2016 à 10:55
Modifié par Matt 666 le 5/03/2016 à 10:55
Salut ! Je reviens ici, parce que j'aurais un autre fichier BAT à demander, j'avoue que je ne comprends pas bien du tout le langage, j'ai essayé mais sans grand succès.
Celui-ci est plus simple, j'ai pas mal de dossier qui arrivent comme ceci :
Et je voudrais qu'ils soient renommés comme ceci :
En gros il faut faire commencer par une condition :
(...) veut dire une date entre parenthèses ! C'est pas forcément la même, la seule chose en commun étant qu'elle est composée de 4 chiffres entourée de parenthèses.
Si tout ce beau monde est réuni, on peut être sûrs que le script se déroulera bien.
Pour la procédure, il faut remplacer " - " par " []"+ la date entre parenthèses de la fin "(...)" en la déplaçant.
SI vous pouvez faire ce truc là, ce serait royal !
Merci à vous !
PS : Ah oui dans le programme du dessus, il met un message d'erreur dans la fenêtre de commande quand il ne reconnait pas un caractère, par exemple "&". C'est possible de faire qqh ? C'est pas bien grave hein ! ^^
Celui-ci est plus simple, j'ai pas mal de dossier qui arrivent comme ceci :
The Heliocentrics - From The Deep (2016)
Et je voudrais qu'ils soient renommés comme ceci :
The Heliocentrics [](2016) From The Deep
En gros il faut faire commencer par une condition :
SI (...) à la fin ET présence de " - " dans le nom du dossier
(...) veut dire une date entre parenthèses ! C'est pas forcément la même, la seule chose en commun étant qu'elle est composée de 4 chiffres entourée de parenthèses.
Si tout ce beau monde est réuni, on peut être sûrs que le script se déroulera bien.
Pour la procédure, il faut remplacer " - " par " []"+ la date entre parenthèses de la fin "(...)" en la déplaçant.
SI vous pouvez faire ce truc là, ce serait royal !
Merci à vous !
PS : Ah oui dans le programme du dessus, il met un message d'erreur dans la fenêtre de commande quand il ne reconnait pas un caractère, par exemple "&". C'est possible de faire qqh ? C'est pas bien grave hein ! ^^
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
7 mars 2016 à 09:12
7 mars 2016 à 09:12
il ne reconnait pas un caractère, par exemple "&".
essayer avec ^&
essayer
essayer avec ^&
essayer
C:> dir /b
aaaa - bbbb (1984)
Heliocentrics - From The Deep (2016)
C:> ..\cc
move "aaaa - bbbb (1984)" "aaaa [](1984) bbbb "
move "Heliocentrics - From The Deep (2016)" "Heliocentrics [](2016) From The Deep "
C:> type..\cc.bat
@echo off
setlocal enabledelayedexpansion
for /F "delims=" %%a in ('dir /b') do (
set nom=%%a
for /F "delims=() tokens=1,2" %%b in ('echo !nom!') do (
set n2=%%b
set a=%%c
)
for /F "delims=- tokens=1,2" %%f in ('echo !n2!') do (
set n=%%f[]^(!a!^)%%g
set n=!n:"=!
echo move "!nom!" "!n!"
)
)
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
7 mars 2016 à 11:26
7 mars 2016 à 11:26
Salut dubcek ! Merci de m'aider une nouvelle fois!
C'est fou ce langage, je ne comprends pas grand chose... Ah aha
essayer avec ^&
Donc c'est pour le 1er programme que tu avais écrit. En gros il met un message d'erreur dans la fenêtre de commande si le texte du dossier contient le caractère '&'
Par exemple si tu crées un nouveau dossier
Ce doit être une histoire d'encodage de caractères...
C'est fou ce langage, je ne comprends pas grand chose... Ah aha
essayer avec ^&
Donc c'est pour le 1er programme que tu avais écrit. En gros il met un message d'erreur dans la fenêtre de commande si le texte du dossier contient le caractère '&'
Par exemple si tu crées un nouveau dossier
texte1 & texte2, il retourne un message d'erreur
'texte2' n’est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.
Ce doit être une histoire d'encodage de caractères...
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
7 mars 2016 à 11:45
7 mars 2016 à 11:45
Sinon pour le nouveau programme :
Je ne t'ai pas dit mais cela ne doit fonctionner que sur les dossiers.
Et aussi il faut déplacer les caractères seulement si
- Le nom de dossier analysé ne contient pas déjà ']('...
- Le nom de dossier contient les caractères '(...)' ET ' - '
- Les parenthèses '(...)' doivent être à la fin
Pour l'instant il renomme tous les dossiers avec []() à la fin. Et je pense que les espaces avant et après le '-' sont importants, il arrive de temps en temps que les dossiers contiennent des '-' seuls sans les espaces autour.
Pour l'instant je suis arrivé là :
Mais je suis un peu bloqué, je veux bien voir comment tu fais le reste ! ^^
Voici une série de dossiers à tester, avec 2 ou 3 pièges ^^ :
Merci encore à toi, c'est vraiment sympa !
Je ne t'ai pas dit mais cela ne doit fonctionner que sur les dossiers.
Et aussi il faut déplacer les caractères seulement si
- Le nom de dossier analysé ne contient pas déjà ']('...
- Le nom de dossier contient les caractères '(...)' ET ' - '
- Les parenthèses '(...)' doivent être à la fin
Pour l'instant il renomme tous les dossiers avec []() à la fin. Et je pense que les espaces avant et après le '-' sont importants, il arrive de temps en temps que les dossiers contiennent des '-' seuls sans les espaces autour.
Pour l'instant je suis arrivé là :
@echo off
setlocal enabledelayedexpansion
for /d %%a in (*.*) do (
echo %%a | findstr /l "](" > NUL
set err=!errorlevel!
echo !err!
if !err! EQU 1 (
set nom=%%a
for /F "delims=() tokens=1,2" %%b in ('echo !nom!') do (
set n2=%%b
set a=%%c
)
for /F "delims=- tokens=1,2" %%f in ('echo !n2!') do (
set n=%%f[]^(!a!^)%%g
set n=!n:"=!
echo move "!nom!" "!n!"
)
)
)
Mais je suis un peu bloqué, je veux bien voir comment tu fais le reste ! ^^
Voici une série de dossiers à tester, avec 2 ou 3 pièges ^^ :
Ecorce [FR](2014) Void(il ne doit pas toucher à ce dossier, il contient déjà
]()
Mermonte [FR](il ne doit pas y toucher non plus, il ne contient ni
-ni
(...))
Windows(il ne doit pas y toucher non plus)
My sleeping doll - (2016) Inner waves(il ne doit pas y toucher non plus, il contient
-et
(...)mais ce dernier n'est pas à la fin)
Korkoj & Friends - Party (2012)(renommé en
Korkoj & Friends [](2012) Party)
Silent (T)error - Démo (2016)(renommé en
Silent (T)error [](2016) Démo)
Rabih Abou-Khalil - Discography (2000)(renommé en
Rabih Abou-Khalil [](2000) Discography)
Merci encore à toi, c'est vraiment sympa !
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
7 mars 2016 à 12:24
7 mars 2016 à 12:24
Ce doit être une histoire d'encodage de caractères...
& est un séparateur de commande, ill ne faut pas l'utiliser pour un nom de fichier
ne pas non plus utiliser <>|\ etc
& est un séparateur de commande, ill ne faut pas l'utiliser pour un nom de fichier
ne pas non plus utiliser <>|\ etc
C:> echo aaa&echo bbb
aaa
bbb
C:>
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
>
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
14 mars 2016 à 21:52
14 mars 2016 à 21:52
Ok donc mieux vaut ne pas utiliser le & ! Merci
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
Modifié par Matt 666 le 19/03/2016 à 13:06
Modifié par Matt 666 le 19/03/2016 à 13:06
Salut dubcek!
Bon je pense avoir fini, dis moi si tu trouves le code satisfaisant, et si tu ne trouves pas des choses inélégantes, ou bizarres !
Merci encore !
Bon je pense avoir fini, dis moi si tu trouves le code satisfaisant, et si tu ne trouves pas des choses inélégantes, ou bizarres !
Merci encore !
@echo off
setlocal enabledelayedexpansion
for /d %%a in (*.*) do (
echo %%a | findstr /l "](" > NUL
set err=!errorlevel!
if !err! EQU 1 (
set nom=%%a
set part=!nom:~-6!
if "!part:~-1!" EQU ")" (
if "!part:~0,1!" EQU "(" (
for /F "delims=() tokens=1,2" %%b in ('echo !nom!') do (
set n2=%%b
set a=%%c
)
for /F "delims=- tokens=1,2" %%f in ('echo !n2!') do (
set n=%%f[]^(!a!^)%%g
set n=!n:"=!
move "!nom!" "!n!"
)
)
)
)
)
pause