Comment faire pour renommer par lots les fichiers dans un répertoire à partir d'une liste de noms dans un fichier texte
Je voudrais utiliser Power Shell ou un fichier de commandes pour renommer plusieurs fichiers dans un dossier basé sur une liste dans un fichier texte. Essentiellement, je veux ajouter les noms de fichiers avec l'auteur au nom de famille (que j'ai stocké dans un fichier texte séparé).
E. g. Actuellement, j'ai:
C:\myfiles
9-ART-2013.pdf
4-EGO-2013.pdf
2-ART-2013.pdf
Mon fichier texte (dans le même ordre que les fichiers):
C:\myfiles
_Smith
_Jenkins
_McMaster
Je veux que les fichiers sont renommés comme suit:
9-ART-2013_Smith.pdf
4-EGO-2013_Jenkins.pdf
2-ART-2013_McMaster.pdf
J'ai vu des problèmes similaires où les gens veulent récursive de renommer les fichiers, mais ils sont toujours à l'aide d'un générique commun ajoutant élément comme l'ajout d'un trait de soulignement ou de pré-pendantes nom de dossier, etc.
par exemple https://serverfault.com/questions/6268/easy-way-to-rename-all-files-in-a-directory-in-windows
- Comment est le script censé déterminer la ligne dans le fichier texte correspond au nom de fichier qui?
- Les fichiers sont triés dans l'annuaire? De quelle manière?
Reverse-alphabetic
selon votre liste? - J'ai été tout simplement l'intention d'manuellement, assurez-vous que l'élément de commande de mon fichier texte correspond au dossier de commande (assending). J'ai un fichier excel avec une colonne pour le nom de fichier et une autre colonne pour le correspondant author_name.
- Je viens de réaliser que j'ai encadré la solution proposée de manière incorrecte. la solution serait plus robuste aux erreurs (correspondant à "nom de fichier" à "l'auteur") pour tout simplement avoir un fichier texte avec un "VIEUX Nom | NOUVEAU-Nom" de la structure. 9-ART-2013.pdf | 9-ART-2013_Smith.pdf 4-EGO-2013.pdf | 4-EGO-2013_Jenkins.pdf 2-ART-2013.pdf | 2-ART-2013_McMaster.pdf Ensuite seulement je pouvais appeler chaque ligne du fichier texte à l'aide de "For /f" et "Ren". J'ai essayé les solutions ci-dessous et saisir des commentaires ci-dessous.
- Permettez-moi de reformuler votre problème. Il est préférable de stocker les deux colonnes de votre feuille excel réparti côte à côte dans un seul fichier texte, peut-être séparés par une virgule. Il est alors facile d'importer ce fichier csv dans un tableau d'objets personnalisés, et le tuyau à une boucle qui calcule le nouveau nom de chaque élément, puis effectue un changement de nom-Objet pour obtenir le résultat. À partir de votre précédent commentaire, on dirait que vous avez été dirigé dans cette direction.
- Le Dumping d'une table dans un fichier CSV est facile dans Excel.
Vous devez vous connecter pour publier un commentaire.
Dans PowerShell, il serait:
Si on dirait qu'il va copier correctement, retirez le
-WhatIf
.;
avantGet-ChildItem
de séparer ces deux états.Une autre façon d'obtenir la même chose:
MODIFIER: Nouvelle méthode ajouté
Si la liste des noms de fichier ont le "ANCIEN Nom NOUVEAU Nom-" la structure, le code est beaucoup plus simple:
Noter que les noms doivent être séparés par un espace.
/o-d
sur queDIR
puis un masque de*-*-*.pdf may be useful. Finally, a
delims " de_
avec untokens=1,2
permettraitif "%%b"==""
pour filtrer les fichiers renommés...if "%%b==""
après laDO
sinon une ligne d'entrée serait mangé si%%b
n'est PAS vide...Prendre Endoro et la simplification:
Ci-dessus sont susceptibles solutions réalisables avec juste un peu de peaufinage, mais la chose la plus simple à faire est de simplement créer un fichier texte dont chaque ligne contenant "le nom de fichier courant"... un ONGLET... alors "le nom de fichier que je voulais".
Puis enregistrez le fichier en tant que rename_list.txt et de créer un fichier de commandes avec le code suivant.
Vous pouvez supprimer la pause de la ligne une fois que vous l'obtenir modifié et s'exécute correctement. Il suffit de copier le rename_list.txt et des lots de fichiers vers le dossier contenant les fichiers que vous souhaitez renommer, puis exécutez le fichier de commandes. Si vous avez un grand dossier avec de nombreux noms de fichiers, vous pouvez les obtenir dans un fichier texte par l'exécution d'un fichier de commandes avec la ligne suivante.
Il va créer un fichier texte filename_scrapper_output.txt que vous pouvez utiliser pour démarrer votre rename_list.txt fichier ci-dessus.