2010-06-01 6 views

Répondre

6

Essayez ceci:

Get-ChildItem abc* | Where {$_ -match 'abc\((\d+)\)'} | 
Foreach {$num = [int]$matches[1]; Rename-Item $_ ("abc({0:000})" -f $num) -wh } 

Le stade où du pipeline est en train de faire deux choses. D'abord, seuls les noms de fichiers correspondant au modèle spécifié sont transmis. Deuxièmement, il utilise un groupe de capture pour saisir la partie numérique du nom qui est assis dans $matches[1].

La phase Foreach applique un script à chaque élément, représenté par $_, qui lui est transmis. La première chose à faire est d'obtenir la partie "numérique" de l'ancien nom de fichier. Ensuite, il utilise Rename-Item (commande de renommer de PowerShell) pour renommer l'ancien nom représenté par $ _ en le nouveau nom qui est calculé en utilisant une chaîne de formatage "abc({0:000})" -f $num. Dans ce cas, la directive de mise en forme va dans {} où 0 représente la position de la valeur spécifiée après -f. Le :000 est une directive de formatage qui affiche un nombre comportant jusqu'à trois zéros. Enfin le -wh est court pour -WhatIf qui dirige des opérations potentiellement destructrices comme Rename-Item pour montrer ce qu'il ferait sans réellement faire quoi que ce soit. Une fois que vous êtes satisfait que la commande fonctionne correctement, supprimez le -wh et réexécutez-le.

+0

Ce serait génial si vous fournissiez un peu d'explication sur la syntaxe, comme Rename-Item. Sinon, ce qui précède est le bruit de ligne sans lire beaucoup de docs powershell. –

+0

Terminé. Je voulais juste vous obtenir une solution avant que je devais aller faire une course. –

+0

C'est ce que je cherchais! Explication entièrement compréhensible. Merci:) – user355889

Questions connexes