Renommer dossiers par lots dans un batch
Modérateurs : Papy.G, fneck, Carl
Renommer dossiers par lots dans un batch
Bonjour à tous,
Tout est dans le titre... Je cherche via un fichier batch à renommer par lots une série de dossiers.
La manip' à faire est la suivante pour tous : retirer le "_fichiers" à la fin du nom d'un dossier (dossiers issus d'enregistrement de pages web). Genre "ma page web_fichiers" en "ma page web"
La commande REN ne permet pas apparemment de renommer des dossiers, il faut plutôt utiliser la commande MOVE.
J'ai tenté des commandes comme move "*_fichiers" "*" mais sans succès. J'ai à chaque fois :
La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte.
J'ai tenté des recherches de cas similaires sur le web, pas trouvé de vrais exemples.
Une idée ?
Tout est dans le titre... Je cherche via un fichier batch à renommer par lots une série de dossiers.
La manip' à faire est la suivante pour tous : retirer le "_fichiers" à la fin du nom d'un dossier (dossiers issus d'enregistrement de pages web). Genre "ma page web_fichiers" en "ma page web"
La commande REN ne permet pas apparemment de renommer des dossiers, il faut plutôt utiliser la commande MOVE.
J'ai tenté des commandes comme move "*_fichiers" "*" mais sans succès. J'ai à chaque fois :
La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte.
J'ai tenté des recherches de cas similaires sur le web, pas trouvé de vrais exemples.
Une idée ?
Re: Renommer dossiers par lots dans un batch
Antrenamer : http://www.antp.be/software/renamer/fr
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Renommer dossiers par lots dans un batch
Merci, je vais regarder !!
-
- Messages : 7987
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Renommer dossiers par lots dans un batch
Il me semble que le powershell de microsoft permet de faire cela:
Powershell est un interpréteur puissant qui remplace avantageusement celui du dos standard. Il est installé sur tous les windows modernes.
- https://blogs.technet.microsoft.com/hey ... s-in-bulk/
- http://www.lazywinadmin.com/2013/10/pow ... lders.html
Code : Tout sélectionner
Get-ChildItem -Filter “*_fichier” -Directory| Rename-Item -NewName {$_.name -replace "_fichier","" }
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: Renommer dossiers par lots dans un batch
REN renomme un fichier,Falkor a écrit :La commande REN ne permet pas apparemment de renommer des dossiers, il faut plutôt utiliser la commande MOVE.
J'ai tenté des commandes comme move "*_fichiers" "*" mais sans succès. J'ai à chaque fois :
La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte.
MOVE déplace un fichier du répertoire courant vers un autre répertoire.
Je ne sais pas si sous DOS il y a une commande pour renommer un répertoire.
Frodon69
Re: Renommer dossiers par lots dans un batch
Est-il envisageable de créer un dossier de destination avec le nom final, copier les fichiers du répertoire source vers le final et supprimer le dossier source?
Ca donne quelque chose comme ca:
@ECHO OFF
SET source=C:\test_fichiers
SET dest=C:\test
MKDIR "%dest%"
COPY /Y "%source%\*.*" "%dest%\"
RMDIR /S /Q "%source%"
Ca donne quelque chose comme ca:
@ECHO OFF
SET source=C:\test_fichiers
SET dest=C:\test
MKDIR "%dest%"
COPY /Y "%source%\*.*" "%dest%\"
RMDIR /S /Q "%source%"
PetitJD
Tortue Jeulin: www.tortue-jeulin.com
Nanoreseau: www.nanoreseau.net
Proteus III: www.proteus-international.fr
Tortue Jeulin: www.tortue-jeulin.com
Nanoreseau: www.nanoreseau.net
Proteus III: www.proteus-international.fr
Re: Renommer dossiers par lots dans un batch
Antrenamer à fait le boulot du premier coup ! Il y a vraiment plein d'options intéressantes, je garde le soft sous le coude !!
Merci à vous.
Merci à vous.
- jojo
- Messages : 668
- Inscription : 13 mai 2007 13:27
- Localisation : Entre la France, la Suisse et l'Italie ... dans la vallée du bien décolleté.
Re: Renommer dossiers par lots dans un batch
Il y a aussi Metamorphose (Windows et Linux) qui fonctionne sur le même principe et qui semble plus performant (peut-être parce que c'est celui que j'ai finalement adopté ! )Daniel a écrit :Antrenamer : http://www.antp.be/software/renamer/fr
Re: Renommer dossiers par lots dans un batch
J'ai une autre colle pour vous...!
Comment récupérer dans une arborescence tout les fichiers d'un même type, genre *.jpg et les coller / déplacer dans un même répertoire ?
Le paramètre /S permet sous certaines commandes DOS de traiter l'intégralité des sous dossiers (genre DIR ou même... DEL ) mais apparemment le paramètre ne marche pas avec la commande COPY (ou MOVE).
Actuellement j'utilise la commande rechercher de windows, mais les performances sont parfois limitées si l'index n'est pas correctement construit, et j'aimerai intégrer cela dans un batch.
J'ai regardé également du coté d'une commande intégrée à windows et fort peu connue, ROBOCOPY, qui possède plein d'options en plus, mais pas trouvé.
Une idée ?
Comment récupérer dans une arborescence tout les fichiers d'un même type, genre *.jpg et les coller / déplacer dans un même répertoire ?
Le paramètre /S permet sous certaines commandes DOS de traiter l'intégralité des sous dossiers (genre DIR ou même... DEL ) mais apparemment le paramètre ne marche pas avec la commande COPY (ou MOVE).
Actuellement j'utilise la commande rechercher de windows, mais les performances sont parfois limitées si l'index n'est pas correctement construit, et j'aimerai intégrer cela dans un batch.
J'ai regardé également du coté d'une commande intégrée à windows et fort peu connue, ROBOCOPY, qui possède plein d'options en plus, mais pas trouvé.
Une idée ?
-
- Messages : 7987
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Renommer dossiers par lots dans un batch
Il faut utiliser XCOPY
Code : Tout sélectionner
C:\>xcopy /?
Copie des fichiers et des arborescences de répertoires.
XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/J]
[/EXCLUDE:fich1[+fich2][+fich3]...]
source Spécifie le ou les fichiers à copier.
destination Spécifie l’emplacement et/ou le nom de nouveaux fichiers.
/A Copie uniquement les fichiers ayant l’attribut archive, ne
modifie pas l’attribut.
/M Copie uniquement les fichiers ayant l’attribut archive,
désactive l’attribut archive.
/D:j-m-a Copie les fichiers modifiés à partir de la date spécifiée.
Si aucune date n’est donnée, copie uniquement les fichiers dont
l’heure source est plus récente que l’heure de destination.
/EXCLUDE:fich1[+fich2][+fich3]...
Spécifie une liste de fichiers contenant des chaînes. Chaque
chaîne doit être placée sur une ligne dans le fichier.
Lorsque l’une des chaînes est trouvée dans le chemin d’accès
absolu du fichier devant être copié, ce fichier est exclu de la
copie. Par exemple, spécifier une chaîne telle que \obj\
ou .obj exclura respectivement tous les fichiers situés sous
le répertoire obj ou tous les fichiers dont l’extension
est .obj.
/P Confirmer la création de chaque fichier
de destination.
/S Copie les répertoires et sous-répertoires à l’exception des
répertoires vides.
/E Copie les répertoires et sous-répertoires, y compris les
répertoires vides.
Identique à /S /E. Peut être utilisé pour modifier /T.
/V Vérifie la taille de chaque nouveau fichier.
/W Vous demande d’appuyer sur une touche avant la copie.
/C Continuer la copie même si des erreurs se produisent.
/I Si la destination n’existe pas et que plus d’un fichier est
copié, considérer la destination comme devant être
un répertoire.
/Q N’affiche pas les noms de fichiers lors de la copie.
/F Affiche les noms de source et de destination complets lors
de la copie.
/L Affiche les fichiers devant être copiés.
/G Permet la copie des fichiers chiffrés vers des destinations qui
ne prennent pas en charge le chiffrement.
/H Copie également les fichiers cachés et les fichiers système.
/R Remplace les fichiers en lecture seule.
/T Crée la structure de répertoires mais ne copie pas
les fichiers.
N’inclut pas les répertoires ou sous-répertoires vides. /T /E
incluent les répertoires et sous-répertoires vides.
/U Copie seulement les fichiers existants déjà dans la
destination.
/K Copie les attributs. La commande normale Xcopy rétablira les
attributs de lecture seule.
/N Copie en utilisant les noms courts générés.
/O Copie les fichiers d’appartenance et les informations d’ACL.
/X Copie les paramètres d’audit de fichiers (sous-entend /O).
/Y Supprime la demande de confirmation de remplacement de
fichiers de destination existants.
/-Y Provoque la demande de confirmation de remplacement
d’un fichier de destination existant.
/Z Copie les fichiers du réseau en mode redémarrable.
/B Copie le lien symbolique et non pas la cible du lien.
/J Copie avec E/S sans mémoires tampons. Recommandé pour les gros
fichiers.
Le commutateur /Y peut être défini dans la variable d’environnement COPYCMD.
Il peut être remplacé par /-Y dans la ligne de commande.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: Renommer dossiers par lots dans un batch
Alors effectivement ça marche, mais il conserve l'arborescence où le fichier est, alors que j'aimerai justement qu'il ne la conserve pas (et qu'il rassemble tout dans un répertoire unique)....
-
- Messages : 7987
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Renommer dossiers par lots dans un batch
Il faudrait dans ce cas préciser ce qu'il faut faire en cas de fichier de même noms, mais dans des sous-dossiers différents. Si on s'en fiche, perso j'utiliserais la commande FOR du dos:
Code : Tout sélectionner
FOR /R c:\temp\source %N in (*.*) do ren %N c:\temp\dest\%~nxN
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: Renommer dossiers par lots dans un batch
Je ne connais absolument pas la commande FOR... mais il ne faut pas mettre un équivalent de next sur une autre ligne ?
-
- Messages : 7987
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Renommer dossiers par lots dans un batch
Non pas de NEXT dans le DOS. Tout doit tenir sur une ligne ou alors il faut utiliser des parenthèses. Pour avoir l'aide et des exemples tu peux faire FOR /? (c'est ce que j'ai fait )
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: Renommer dossiers par lots dans un batch
Alors concrètement mon arborescence compliquée est dans c:\curl, et je désire mettre tout les fichiers JPG dans c:\out
J'ai tenté : (il faut doubler les % car j'ai placé la commande dans un batch)
Il balaye bien l'arborescence et affiche les fichiers, mais la copie ne s'effectue pas car il exécute :
Voici l'aide :
J'ai tenté : (il faut doubler les % car j'ai placé la commande dans un batch)
Code : Tout sélectionner
FOR /R c:\curl %%N IN (*.jpg) DO copy %%N c:\zorkdemo\%%~nxI
Il ne remplace pas le %~nxI par le nom de fichier court...?C:\curl>copy c:\curl\dossiers\sub\out\16.jpg c:\zorkdemo\%~nxI
Le fichier spécifié est introuvable.
Voici l'aide :
C:\curl>for /?
Exécute une commande donnée pour chaque fichier d'un ensemble de fichiers.
FOR %variable IN (ensemble) DO commande [paramètres]
%variable Spécifie un paramètre remplaçable par une seule lettre.
(ensemble) Ensemble de fichiers. Caractères génériques autorisés.
commande Commande à exécuter pour chaque fichier.
paramètres Liste des paramètres ou des options pour la commande
spécifiée.
Pour utiliser la commande FOR dans un programme de commandes, spécifiez
%%variable au lieu de %variable. Les noms de variables respectent la
casse, donc %i est différent de %I.
Si les extensions de commandes sont activées, les formes supplémentaires
suivantes sont prises en charge pour la commande FOR :
FOR /D %variable IN (ensemble) DO commande [paramètres]
Si ensemble contient des caractères génériques, alors la correspondance se
fait sur les noms de répertoires au lieu des noms de fichiers.
FOR /R [[lecteur:]chemin] %variable IN (ensemble) DO commande [paramètres]
Parcourt l'arborescence de répertoires depuis la racine [lecteur:]chemin,
en exécutant FOR dans chaque répertoire de l'arborescence. Si aucun
répertoire n'est spécifié après /R alors le répertoire en cours est
utilisé. Si ensemble est seulement un point (.) alors seule l'arborescence
de répertoires sera énumérée.
FOR /L %variable IN (début,pas,fin) DO commande [paramètres]
L'ensemble est une séquence de chiffres allant de début à fin, incrémenté
de pas. Ainsi (1,1,5) génère la séquence 1 2 3 4 5 et (5,-1,1) génère la
séquence (5 4 3 2 1)
FOR /F ["options"] %variable IN (ensemble-fichiers) DO commande [paramètres]
FOR /F ["options"] %variable IN ("chaîne") DO commande [paramètres]
FOR /F ["options"] %variable IN ('commande') DO commande [paramètres]
ou, si l'option usebackq est utilisée :
FOR /F ["options"] %variable IN (ensemble-fichiers) DO commande [paramètres]
FOR /F ["options"] %variable IN ('chaîne') DO commande [paramètres]
FOR /F ["options"] %variable IN ((`commande`) DO commande [paramètres]
ensemble-fichiers est un ou plusieurs noms de fichiers. Chaque fichier est
ouvert, lu et traité avant de passer au fichier suivant de
ensemble-fichiers. Le traitement consiste à lire dans le fichier, le
découper en lignes individuelles de texte puis analyser chaque ligne en
zéro ou plusieurs jetons. Le corps de la boucle FOR est ensuite appelé
avec la ou les valeurs de variables prenant la valeur de la ou des chaînes
de jeton trouvées. Par défaut, /F transmet le premier jeton séparé par un
blanc dans chaque ligne de chaque fichier. Les lignes vides sont ignorées.
Vous pouvez outrepasser le comportement d'analyse par défaut en spécifiant
le paramètre optionnel "options". Ceci est une chaîne entre guillemets
contenant un ou plusieurs mots-clés spécifiant diverses options d'analyse.
Les mots-clés sont :
eol=c - spécifie un caractère de commentaire de fin de ligne
(un seul)
skip=n - spécifie le nombre de lignes à ignorer en début
de fichier.
delims=xxx - spécifie un ensemble de délimiteurs. Ceci remplace
l'ensemble de délimiteurs par défaut qui sont
l'espace et la tabulation.
tokens=x,y,m-n - spécifie les jetons de chaque ligne devant être
transmis au corps de FOR à chaque itération.
Ceci provoquera l'allocation de noms de variables
supplémentaires. La forme m-n est une étendue
spécifiant les jetons allant de m à n. Si le
dernier caractère de la chaîne tokens= est une
astérisque, alors une variable supplémentaire est
allouée et reçoit le texte restant dans la ligne
suivant le dernier jeton analysé.
usebackq - spécifie que la nouvelle sémantique est en place,
lorsqu'une chaîne entre guillemets inversés est
exécutée en tant que commande et une chaîne entre
guillemets simples est une chaîne de commande
littérale et permet l'utilisation de guillemets
doubles pour citer des noms de fichiers.
Quelques exemples explicatifs :
FOR /F "eol=; tokens=2,3* delims=, " %i in (fichier.txt) do @echo %i %j %k
analyse chaque ligne de monfichier.txt, en ignorant les lignes commençant
par un point-virgule, en transmettant les deuxième et troisième jetons de
chaque ligne au corps de FOR, les jetons étant délimités par des
virgules et/ou espaces. Notez que le corps de FOR référence %i pour
l'obtention du deuxième jeton, %j pour l'obtention du troisième jeton
et %k pour l'obtention des jetons restants après le troisième. Pour les
noms de fichiers contenant des espaces, placez les noms de fichiers
entre guillemets doubles. Afin d'utiliser ainsi les guillemets doubles,
vous devez également utiliser l'option usebackq, faute de quoi les
guillemets doubles seraient interprétés comme définissant une chaîne
littérale à analyser.
%i est déclarée explicitement dans la déclaration FOR et %j et %k
sont déclarées implicitement via l'option tokens=. Vous pouvez spécifier
jusqu'à 26 jetons via la ligne tokens=, tant que cela ne provoque pas
de tentative de déclaration de variable plus élevée que la lettre 'z'
ou 'Z'. Souvenez-vous que les variables de FOR se composent de lettres,
tiennent compte de la casse, sont globales et que plus de 52 ne peuvent
pas être actives à la fois.
Vous pouvez aussi utiliser la logique d'analyse FOR /F sur une chaîne en
plaçant ensemble-fichiers entre guillemets entre les parenthèses,
en utilisant des guillemets simples. Elle sera traitée comme une ligne
d'entrée simple provenant d'un fichier puis analysée.
Enfin, vous pouvez utiliser la commande FOR /F pour analyser la sortie
d'une commande. Faites ceci en plaçant des guillemets
inversés autour de ensemble-fichiers entre les parenthèses. Elle sera
traitée comme une ligne de commande transmise à un CMD.EXE enfant et
la sortie est gardée en mémoire et analysée comme s'il s'agissait d'un
fichier. Ainsi l'exemple suivant :
FOR /F "usebackq delims==" %i IN (`ensemble`) DO @echo %i
énumérerait les noms de variables d'environnement de l'environnement
en cours.
De plus, la substitution de références de variables FOR a été améliorée.
Vous pouvez maintenant utiliser la syntaxe optionnelle suivante :
%~I - étend %I en supprimant les guillemets (")
%~fI - étend %I en nom de chemin d'accès reconnu
%~dI - étend %I en lettre de lecteur uniquement
%~pI - étend %I en chemin d'accès uniquement
%~nI - étend %I en nom de fichier uniquement
%~xI - étend %I en extension de fichier uniquement
%~sI - chemin étendu contenant uniquement des noms courts
%~aI - étend %I en attributs du fichier
%~tI - étend %I en date/heure du fichier
%~zI - étend %I en taille du fichier
%~$PATH:I - parcourt les répertoires de la variable
d'environnement PATH et étend %I en nom du
premier fichier reconnu trouvé. Si le nom de la
variable d'environnement n'est pas défini ou
que le fichier n'est pas trouvé par la recherche,
alors ce modificateur étend en chaîne vide
Vous pouvez combiner les modificateurs pour obtenir des résultats composés :
%~dpI - étend %I en lettre de lecteur et chemin d'accès uniquement
%~nxI - étend %I en nom de fichier et extension uniquement
%~fsI - étend %I en nom de chemin complet avec noms courts
uniquement
%~dp$PATH:i - parcourt les répertoires listés dans la variable
d'environnement PATH à la recherche de %I et étend
en lettre de lecteur du premier trouvé.
%~ftzaI - étend %I en DIR comme ligne en sortie
Dans les exemples ci-dessus %I et PATH peuvent être remplacés par d'autres
valeurs valides. La syntaxe %~ se termine par un nom de variable FOR valide.
Le choix de noms de variables en majuscules comme %I facilite la lecture
et empêche toute confusion avec les modificateurs qui ne tiennent pas compte
de la casse.