Je suis en train de renommer plusieurs fichiers de _2. à . Je veux supprimer le suffixe "_2"
Ma première solution consiste à essayer
ren *_2.* *.*
mais ça ne marche pas. L'aide est appréciée.
Je suis en train de renommer plusieurs fichiers de _2. à . Je veux supprimer le suffixe "_2"
Ma première solution consiste à essayer
ren *_2.* *.*
mais ça ne marche pas. L'aide est appréciée.
Réponses:
Vous pouvez utiliser ce script batch:
@echo off
setlocal enabledelayedexpansion
for /r %%G in (*_2.*) do (
set new=%%~nG
set new=!new:~0,-2!
ren "%%~G" "!new!%%~xG"
)
*_2.*
. _2
suffixe de chaque nom de fichier ( %%~nG
) en enlevant les 2 derniers caractères. %%~xG
) au nouveau nom. __2.bin --> _.bin
abc_def_2.txt --> abc_def.txt
2014_02_23_2.log --> 2014_02_23.log
Vous pouvez essayer ceci comme un petit .cmd:
@echo off
setlocal enabledelayedexpansion
for %%a in (*_2.*) do (
set fnm=%%a
echo ren !fnm! !fnm:_2.=.!
)
lequel semble faire ce que vous attendez (supprimer l'écho s'il est satisfait par le test).
Je viens de voir un problème possible si vous avez plusieurs _2.
dans le nom du fichier
MODIFIER : proposition incomplète remplacée selon la suggestion
2014_02_23_2.log
. Si vous supprimez tout _2
en le remplaçant par une chaîne vide, vous vous retrouveriez avec un fichier nommé 2014_023.log
. Pas vraiment ce que le PO voulait.
Voici comment vous pouvez le faire dans PowerShell (c'est un one-liner alors assurez-vous de faire défiler vers la droite):
gci PATH\TO\YOUR\FOLDER\ | ? {!$_.PSIsContainer -and $_.BaseName.EndsWith("_2")} | ren -NewName {("{0}{1}" -f $_.BaseName.Substring(0, $_.BaseName.Length-2), $_.Extension)}
gci est un alias de Get-ChildItem - entrez le chemin de votre dossier ici. Si vous avez des sous-dossiers, ajoutez -Recours après le chemin
? est un alias de Where-Object - ici nous parcourons les éléments et vérifions qu'il ne s'agit PAS d'un dossier et que son nom se termine par "_2" (sans l'extension du fichier).
ren - Rename-Item - Enfin, nous renommons les fichiers qui ont passé le filtre Where-Object. En utilisant Substring, nous venons de couper les deux derniers caractères du nom de fichier.
Cela devrait le faire, en supposant que les modèles est vraiment _2.*
et pas _2*.*
(rien après le chiffre 2) et il n'y a qu'un seul trait de soulignement dans le nom et31415 correctement souligné - car il supprimera tout _
(soulignement) jusqu'à l'extension
for %i in (*_2.*) do (@for /f "delims=_ tokens=1" %j in ("%~ni") do @echo ren "%i" "%j%~xi")
Notez s'il vous plaît:
- c'est une ligne, comme exécuté directement depuis la ligne de commande
- maintenant seulement des échos ren commande à la console. Après avoir vérifié qu'il fonctionnerait correctement, supprimez @echo
pour qu’il renomme réellement les fichiers.
abc_def_2.txt
. Ensuite, votre code le renommerait en abc.txt
, ce qui n’est pas le résultat attendu.
Voici le one-liner pour le faire avec JP Software Prendre La Commande , un interprète de commande dont REN
commande supporte les expressions régulières:
ren ::(.*)_2\.(.*) ::\1.\2
Je ne connais pas une façon très rapide et sale de le faire.
Mais que diriez-vous de canaliser une liste de répertoires nus dans un fichier TXT. Chargez le fichier dans une feuille de calcul et créez une ou plusieurs formules pour créer les commandes de changement de nom. Ensuite, vous pouvez copier les commandes de changement de nom en tant que valeurs et les coller dans un fichier de commandes pouvant être exécuté pour effectuer les renommés.