Comment puis-je renommer en masse des fichiers?

126

J'ai un tas de fichiers nommés avec un motif 99 - DescriptiveName.txtet j'aimerais supprimer le numéro de l'avant afin que je viens de DescriptiveName.txt.

Comment puis-je faire ceci? Puis-je le faire depuis la ligne de commande ou existe-t-il un utilitaire capable de le faire?

CodeSlave
la source

Réponses:

94

Je sais que dans votre titre, vous dites "in dos" mais j'ai l'impression que vous cherchez simplement un moyen de le faire et que vous vous demandez si c'est le meilleur moyen.

Le meilleur outil que j'ai trouvé pour cela est Bulk Rename Utility .

Renommer en bloc Utilitaire

Ce n'est pas un outil de ligne de commande, mais ils ont une version en ligne de commande si vous voulez vraiment l'utiliser de cette façon.

J'ai beaucoup utilisé la version graphique, et elle est très puissante, très rapide et extrêmement facile à utiliser.

Oh, et c'est GRATUIT pour un usage personnel.

Jim McKeeth
la source
Malheureusement, l'outil n'est pas gratuit pour un usage commercial :(
AntonK
C'est pourquoi j'ai dit que c'était gratuit pour un usage personnel.
Jim McKeeth
2
C'est un outil super rapide. Il a résolu mon problème de fichiers 6.000 en quelques secondes, en utilisant plusieurs logiques de recherche et remplacement. C'est comme utiliser Notepad ++ mais éditer des milliers de fichiers. Une excellente solution, merci!
Cacahuètes
59

Un petit script PowerShell:

$args | Rename-Item -NewName { $_.Name.ToLower() -replace '\d+ - ' }

Combiné avec des expressions régulières plus complexes, ceci pourrait devenir quelque chose comme:

ls | Rename-Item -NewName {$_ -replace '(\d+) - (.*).mp3', '$2 - $1.mp3' }

Ce qui transforme des choses comme '01 - Beginning.mp3 'en' Beginning - 01.mp3 '.

Utilisez le -WhatIfparamètre on Rename-Itempour vérifier les renames avant de les émettre.

sysrqb
la source
1
@sysrqb, s'il vous plaît, recherchez un peu plus.
Joey
Est-ce que remplacer ne nécessite pas deux expressions de chaîne? Le second en a deux, le premier non. ... -replace '\d+ - ',''. En outre, je crois que le premier est meilleur, supprimant simplement le début en utilisant regex. Bien que je pense que vous devriez inclure l’ancre ^ au début de l’expression pour qu’elle ne corresponde qu’aux noms commençant par des nombres.
Xalorous
1
@Xalorous: Eh bien, vous pouvez simplement l'essayer. -replacepeut n’avoir qu’un seul argument à droite, auquel cas le second est implicitement la chaîne vide.
Joey
Cela m'a sauvé .. Bulk Rename Utility vient de planter et j'ai essayé beaucoup d'autres solutions. C'est beaucoup mieux pour les personnes qui sont à l'aise avec regexp. Merci beaucoup !!
Inkh Su Tesou
24

Si vous voulez vraiment utiliser la ligne de commande de Windows (si vous ne voulez pas télécharger quelque chose), vous pouvez le faire comme ceci:

dir /B > fileList.txt
for /f "tokens=1,2,3" %i in (fileList.txt) DO ren "%i %j %l" %l

La première ligne affiche la liste des fichiers dans un fichier appelé fileList.txt. La deuxième ligne sépare chacun des noms de la liste en 3 parties, le #, le "-" et le reste du nom. Pour chacun de ceux-ci il fait la commande renommer.

zdan
la source
2
Supprimez la première ligne pour la simplifier et faites:for /f "tokens=1,2,3" %i in ('dir /B') DO ren "%i %j %l" %l
Je sais que cela est ancien mais que la réponse est solide: seul le% l (% L) doit correspondre à% k (% K) [incréments de jetons à partir de% i (% I), donc I, J, K ...]
Donald Byrd
24

Avec AntRenamer, il est assez facile de définir un modèle de changement de nom; il y a beaucoup de ceux déjà préparés (et cela donne un aperçu des actions):

AntRenamer

Gratuit pour un usage personnel et commercial.

Gnoupi
la source
19

vieille école:

Vous pouvez créer un répertoire DIR et rediriger la sortie vers un fichier, comme dans DIR * .TXT> TEMP.BAT

Ensuite, utilisez un éditeur pour extraire ce dont vous n’avez pas besoin et modifier les parties dont vous avez besoin. Ajoutez un "@echo off" comme première ligne, enregistrez-le et exécutez-le.

WireGuy
la source
J'ai obtenu cette référence de page d'un doctorat de la vieille école dans ceci: dostips.com/DosCommandIndex.htm ; C’est incroyable ce que vous pouvez faire avec (bon?) Vieux DOS!
Nik
16

Une autre option: Massive File Renamer

Il permet de renommer facilement plusieurs fichiers et extensions de fichiers . C'est très simple et rapide!

Pour les utilisateurs avancés et les développeurs, il est possible d'utiliser des expressions régulières .

Voyez-le en action:

entrez la description de l'image ici

IvanRF
la source
1
Btw comment pouvons-nous le sélectionner pour ouvrir tous les fichiers dans les sous-dossiers? J'ai un dossier racine avec environ 50 sous-dossiers (récursivement) et plusieurs fichiers en leur sein.
Pacerier
1
@ Pacerier Je pense que le sélecteur de fichier Java ne le permet pas. J'ai eu l'idée de permettre la sélection d'un dossier et la recherche récursive peut être incluse. Je le noterai et l'ajouterai dans une prochaine version!
IvanRF
13

J'utilise l' outil multi-renommage de Total Commander (ctrl + M) pour des choses comme celle-ci. Leur outil utile, trop nombreux pour être compté, est facile à utiliser et peut également utiliser des expressions régulières et des modèles si nécessaire. Oh, et cela vous donne évidemment un aperçu avant d’apporter des modifications.

C'est la troisième ou quatrième question à laquelle j'ai répondu en recommandant Total Commander ... Je devrais recevoir une commission de leur part ;-)

Yuval
la source
11

L'outil dont je suis satisfait est ReNamer . Il prend également en charge la sauvegarde des règles de renommage, ce qui m’a été utile, car j’effectue souvent les mêmes renommages.

Vous trouverez ci-dessous un exemple de suppression de texte avant le premier tiret, mais vous pouvez définir d’autres règles.

entrez la description de l'image ici

Esko Luontola
la source
5

J'ai utilisé Free Commander Portable (freeware) à cet effet:

  1. Sélectionnez ou naviguez vers les fichiers ou les répertoires à renommer
  2. Appuyez sur [Ctrl-M] (ou Fichier> Renommer plusieurs fois).
  3. remplissez les champs comme bon vous semble
  4. vérifier l'aperçu montre ce que vous attendez
  5. Aller!
Matt Wilkie
la source
4

Pour les utilisateurs avancés et les développeurs, je suggérerais RegexRenamer .

RegexRenamer capture d'écran

Avantages:

  • Interface utilisateur très simple;
  • Expressions régulières que les développeurs connaissent bien;
  • GPLv2;

Les inconvénients:

  • Ce n'est pas une ligne de commande! :)
bytebuster
la source
Impossible de le faire fonctionner de manière récursive pour tous les sous-dossiers du dossier sélectionné!
Luckylooke
3

Voici une solution en ligne de commande - un programme Java que j’ai écrit pour faciliter le travail avec les "modèles" dans les noms de fichiers. C'est gratuit et open source, alors n'hésitez pas à le modifier:

RenameWand
http://renamewand.sourceforge.net/

Quelques exemples d'utilisation pertinents:

Déposez tout ce qui précède "-"le nom du fichier:

java -jar RenameWand.jar  "<a> - <b>"  "<b>"

Ajoutez un numéro à 3 chiffres au nom du fichier, en triant par heure de la dernière modification:

java -jar RenameWand.jar  "<a>"  "<3|#FT> <a>"

Réorganisez des parties du nom de fichier et changez la casse:

java -jar RenameWand.jar  "<album> - <artist> - <song>.<ext>" 
                          "<artist.upper> <album.title> - <song>.<ext.lower>"
Zach Scrivena
la source
3

J'ai découvert RenPhoric il y a environ un mois. Superbe. Et c'est gratuit .

Pas d'interface compliquée et j'ai pu rapidement renommer exactement ce que je voulais. Expression régulière capable. Je n'ai rien utilisé d'autre depuis.

Virole Ombre
la source
2

J'aime le nom sauvage de Cylog . Il est puissant, mais facile à utiliser et possède de nombreuses fonctionnalités:

  1. vite
  2. manipulation de cordes
  3. des comptoirs
  4. joker
  5. expressions régulières
  6. substitution
  7. conversion de casse
  8. enregistrement
  9. simulation (montrer les résultats sans les appliquer)

entrez la description de l'image ici

Synetech
la source
2

Comme @zdan ci-dessus, je l'ai fait par ligne de commande (en utilisant "cmd.exe" dans Windows). Cela a pris un peu de bricolage pour mon cas particulier, mais un peu de recherche a résolu le problème.

Comme zdan, je sortie la liste dans un fichier TXT, puis utilisé tokenset delimsrenommer les fichiers en conséquence. Dans mon cas, j'ai commencé avec une liste de fichiers nommés comme suit:

name-01-02-2012.csv

Je voulais que la partie date du fichier soit dans l'ordre j / m / j, avec la partie "nom" à la fin pour que cela se lise comme suit:

2012-01-02-name.csv

Pour faire cela en masse, j'ai utilisé le code suivant. Notez que lorsque vous le faites de cette façon, TOUTES les parties du nom de fichier sont considérées, y compris l’extension ".csv". Cela m'a gaffé la première fois.

dir /B > fileList.txt
for /f "tokens=1,2,3,4,5 delims=-." %i in (fileList.txt) DO ren "%i-%j-%k-%l.%m" %l-%j-%k-%i.%m

Ce tokenssont les "parties" du nom de fichier, ce delimssont les séparateurs. Notez que dans mon cas, j'avais 2 délimiteurs (un tiret et un point).

Personnellement, je ne me soucie pas de l'application "Bulk Rename". Comme d'autres l'ont mentionné, l'interface graphique est atroce et pas très intuitive. Avec un peu de recherche et un codage simple, ces choses peuvent être faites beaucoup plus efficacement et rapidement.

gtr1971
la source
2

Nom amusant et outil de ligne de commande très puissant, très rapide et extrêmement facile à utiliser. "Trouver et remplacer le texte" FART http://fart-it.sourceforge.net/ WORKS GREAT! peut renommer des mots dans des fichiers txt aussi.

USAGE

Usage: FART [options] [--] <wildcard>[,...] [find_string] [replace_string]

Options:
 -h --help          Show this help message (ignores other options)
 -q --quiet         Suppress output to stdio / stderr
 -V --verbose       Show more information
 -r --recursive     Process sub-folders recursively
 -c --count         Only show filenames, match counts and totals
 -i --ignore-case   Case insensitive text comparison
 -v --invert        Print lines NOT containing the find string
 -n --line-number   Print line number before each line (1-based)
 -w --word          Match whole word (uses C syntax, like grep)
 -f --filename      Find (and replace) filename instead of contents
 -B --binary        Also search (and replace) in binary files (CAUTION)
 -C --c-style       Allow C-style extended characters (\xFF\0\t\n\r\\ etc.)
    --cvs           Skip cvs dirs; execute "cvs edit" before changing files
 -a --adapt         Adapt the case of replace_string to found string
 -b --backup        Make a backup of each changed file
 -p --preview       Do not change the files but print the changes
slm
la source
Quelques détails supplémentaires? Renomme-t-il les fichiers ?
vonbrand
Oui, -foption, telle que listée.
user1016274
2

Le script de renommage multiple est une alternative open source à l'outil Total Renommer de Total Commanders que vous pouvez piloter via un script. Il peut utiliser les plugins TC pour les informations de métadonnées.

https://code.google.com/p/multi-rename-script/ http://multi-rename-script.googlecode.com/svn/trunk/docs/res/MRS.PNG

majkinetor
la source
2
@Écho off
setlocal enabledelayedexpansion
set X = 5
définissez FOLDER_PATH =.
pushd% FOLDER_PATH%
pour %% f in (*) faire si %% f neq% ~ nx0 (
    set "nom_fichier = %% ~ nf"
    définir "nom_fichier =! nomfichier: ~% X%!"
    ren "%% f" "! nomfichier! %% ~ xf"
)
popd

enregistrer ceci dans un fichier de commandes et exécuter

bbm123
la source
C'est bien, mais comment puis-je être capable de transformer le X en une variable (passer en paramètre)?
Kangkan
@Kangkan comme ceci:set /p "X=Enter the value for X: "
Kidquick
1

J'utilise Blackboard pour administrer des cours dans une université. Lorsque je télécharge une assignation en masse (dans Blackboard, cliquez sur en haut de la colonne de notation, puis "télécharger le fichier de l'affectation". Blackboard ajoute un tas de choses supplémentaires au nom du fichier - ce qui rend le nom du fichier trop long pour être valide sous Windows.

Voici à quoi ils ressemblent:

Recitation20Assignment_studentname_attempt_2013-03-01-20-03-09_Exercise28129.docx

Et c'est ce que je voulais

studentname.docx

J'ai donc utilisé l'approche recommandée par @zdan et @ gtr1971, en ouvrant une fenêtre de commande sur le dossier contenant les fichiers (CMD.EXE). Ensuite, exécutez cette commande pour mettre tous les noms de fichiers dans un document.

dir /b >filelist.txt

Editez le document et supprimez les noms de dossiers, etc.

Utilisez cette commande pour remplacer les éléments de nom de fichier ajoutés au tableau noir par le nom d'utilisateur et l'extension de fichier.

for /f "tokens=1,2,3,4,5,6 delims=_." %i in (filelist.txt) do ren "%i _%j_%k_%l_%m.%n" %j.%n

J'espère que cela aide aussi quelqu'un d'autre.

Webmentorman
la source
1

J'ai développé un utilitaire de ligne de commande hybride JScript / batch appelé JREN.BAT qui permet de renommer des fichiers ou des dossiers en effectuant une recherche par expression régulière et en remplaçant les noms. C'est un script pur qui s'exécutera de manière native sur n'importe quelle machine Windows à partir de XP forward. Une documentation complète est intégrée au script.

En supposant que JREN.BAT se trouve dans votre répertoire actuel ou, mieux encore, quelque part dans votre chemin, votre tâche de changement de nom devient triviale.

jren "^\d+[ -]+(.+)\.txt$" "$1" /i

ou

jren "^\d+[ -]+(?=.+\.)" "" /fm "*.txt"

Il existe de nombreuses options, notamment celle /Squi effectue de manière récursive le changement de nom sur des sous-répertoires.

Dbenham
la source
0

Si vous avez besoin d'énergie sérieuse et que vous êtes prêt à débourser de l'argent ... PowerGrep est l'un des outils les plus puissants et les plus polyvalents du marché ... vous pouvez renommer presque n'importe quoi avec PowerGrep ... même la recherche et le remplacement binaires ... il a été créé par Jan Goyvaerts , gourou de RegEx .

entrez la description de l'image ici

Eddie B
la source
Cet utilitaire est incroyablement cher ...
Wizard79
Vous pouvez l'utiliser gratuitement indéfiniment ... cependant, ça vaut le coup ... Je l'utilise tout le temps.
Eddie B