2 votes

renommer des fichiers en powershell

Comment puis-je renommer chaque fichier du dossier ?

le motif est : (première partie du nom de fichier).digit_(nom de fin)

par exemple

a.1_f
b.2_f
c.3_g

Je voudrais le remplacer par

a.01_f
b.02_f
c.03_ g

...

Merci de votre aide

5voto

Keith Hill Points 73162

Essayez ça :

Get-ChildItem | Where {!$_.PSIsContainer} | 
    Rename-Item -NewName {$_ -replace '([^.]+)\.(\d)(\w)', '$1.0$2$3'} -wh

Ou si vous avez plus de neuf dossiers :

gci | ? {!$_.PSIsContainer -and $_.Name -match '([^.]+\.)(\d)(\w+)'} |  
  rni -NewName {$matches[1] + ("{0:00}" -f [int]$matches[2]) + $matches[3]} -wh

Le deuxième exemple utilise des alias pour raccourcir la commande (plus facile à taper). gci est l'alias pour Get-ChildItem , ? est l'alias pour Where-Object y rni est l'alias pour Rename-Item . Le site -wh invoque le WhatIf où PowerShell vous montrera ce qu'il fera pour que vous puissiez modifier la commande jusqu'à ce que vous soyez satisfait des résultats. Ensuite, supprimez le -wh pour l'exécuter.

0voto

Scott Weinstein Points 11404

Une façon d'y parvenir est de décomposer le fichier au moyen d'expressions régulières, puis d'assembler le nouveau nom du fichier à partir des parties, suivi d'un Rename-Item

  • Une expression rationnelle correspondant à vos fichiers pourrait être \w+\.\d+_\w
  • Pour imprimer "001" alors que vous avez 1, vous pouvez utiliser l'opérateur de format, tel que "{0:000}" -f 1
  • Pour parcourir les fichiers en boucle, utilisez Get-ChildItem & Foreach-Object ou comme j'aime l'écrire ls | % {}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X