Renommer par lots automatisation * _2. * TO *. *

1

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.

Abdelhafid Madoui
la source
Environ combien de fichiers devez-vous renommer? Sont-ils tous la largeur de vente en termes de nombre de caractères?
Jim
Environ 1000 fichiers et ils ont un nombre différent de caractères
Abdelhafid Madoui

Réponses:

2

Solution

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"
)

Comment ça marche

  1. Lister tous les fichiers correspondants *_2.*.
  2. Retirer le _2 suffixe de chaque nom de fichier ( %%~nG ) en enlevant les 2 derniers caractères.
  3. Ajouter l'extension d'origine ( %%~xG ) au nouveau nom.
  4. Renommez le fichier.

Cas de test

__2.bin --> _.bin
abc_def_2.txt --> abc_def.txt
2014_02_23_2.log --> 2014_02_23.log

Lectures complémentaires

and31415
la source
C'est ce que je veux; Merci beaucoup
Abdelhafid Madoui
1

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

FredP
la source
Le remplacement d'une sous-chaîne peut avoir des effets secondaires indésirables. Disons que vous avez un fichier appelé 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.
and31415
Devrais-je résoudre ce problème, car de toute façon je suis évidemment "sur-répondu" avec de meilleurs batchlets?
FredP
La réponse elle-même n’est pas totalement fausse, mais vous devriez l’améliorer en élaborant un peu plus, en ajoutant un avertissement et éventuellement en fournissant un exemple de code fonctionnel.
and31415
0

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.

Siim K
la source
0

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.

wmz
la source
Supposons qu'un fichier s'appelle abc_def_2.txt. Ensuite, votre code le renommerait en abc.txt, ce qui n’est pas le résultat attendu.
and31415
@ and31415 oui bonne prise - drôle je viens de le remarquer moi-même et j'étais sur le point d'ajouter un avertissement :-)
wmz
0

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

Lectures complémentaires

  • Logiciel JP. REN . Prise de commande / Aide TCC.
JdeBP
la source
-1

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.

Jim
la source