Question Renommer les extensions de plusieurs fic. (Résolu)

Plus d'informations
il y a 17 ans 2 mois #3587 par Burgun
Bonjour,

Ma question est toutes bête. Comment peut on renommer uniquement l'extension de plusieurs fichiers.

Ex: j'ai 5 fichiers xxxxx.txt, je veux les renommer en xxxxx.bat.

J'ai bien trouvé la commande rename-item, ainsi que des tuto pour renommer des fichiers en masses, mais comment ne travailler que sur l'extension.<br><br>Message édité par: Arnaud, à: 5/01/09 22:04

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 2 mois #3589 par Laurent Dardenne
bvivi57 écrit:

Ma question est toute bête.

Sans code elle est même mystérieuse :P

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 2 mois #3592 par Patrick Berthon
[code:1]
dir *.txt | ForEach-Object {
$a = ($_.Name).Substring(0,(($_.Name).Length)-4)
mv $_.Name \&quot;$a.bat\&quot;
}
[/code:1]

si tu veux tester, remplace la ligne mv $_.Name \&quot;$a.bat\&quot; par \&quot;$a.bat\&quot; (sauf si -whatif fonctionne pour mv)

(je te conseille de tester, au fait :P )

PS: les pros du coin pourrons surement te proposer une solution plus propre:lol:<br><br>Message édité par: Zylwee, à: 30/12/08 22:09

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 2 mois #3593 par Laurent Dardenne
L'avantage de citer un code ou une ébauche de code est qu'on peut effectivement proposer des améliorations ou d'autres approches :
Zylwee écrit:

[code:1]
dir *.txt | ForEach-Object {
$a = ($_.Name).Substring(0,(($_.Name).Length)-4)
mv $_.Name \&quot;$a.bat\&quot;
}
[/code:1]

Tu peux remplacer le foreach par un scriptblock renvoyant une string et utiliser rename-item qui est plus parlant sur ce que doit faire le code même si ici le résultat obtenu est identique.
Ensuite il y a de nombreuses manières de faire :
[code:1]
get-childitem -Path *.txt |rename-item -NewName {$_.name -replace \&quot;.txt$\&quot;,\&quot;.bat\&quot;} -whatif
[/code:1]
J'ai trouvé la précédente sur le net, j'ai juste ajouté dans la regex la fin de chaîne ('$') car en théorie le fichier peut contenir plusieurs fois le pattern \&quot;.txt\&quot;. A noter qu'une extension de fichier peut contenir n caractères en NTFS :
[code:1]
Write \&quot;Test PS extension\&quot;&gt;Fichier.12345
Write \&quot;Test PS extension\&quot;&gt;Fichier.12345.12345
[/code:1]
Ensuite on peut utiliser les méthodes statique de la classe System.IO.Path ou l'opérateur F :
[code:1]
#ChangeExtension ne fait que renvoyer un nouveau nom
dir *.txt| Rename-item -NewName {[System.IO.Path]::ChangeExtension($_.name,\&quot;.bat\&quot;«»))} -whatif
dir *.txt| Ren -N {\&quot;{0}.{1}\&quot; -F $_.BaseName,\&quot;bat\&quot;} -whatif
[/code:1]
Reste à mesurer laquelle est la plus véloce.

Du coup avec la syntaxe précédente on peut utiliser move-item pour déplacer et renommer en une opération:
[code:1]
$Destination=\&quot;c:\temp\test\&quot;
dir *.txt| Move-item -destination {\&quot;{0}\{1}.{2}\&quot; -F $Destination,$_.BaseName,\&quot;bat\&quot;} -whatif
[/code:1]
Sinon il y a quelques bugs mineur avec ces 2 cmdlets, voir le site MS-Connect.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 2 mois #3596 par Patrick Berthon

A noter qu'une extension de fichier peut contenir n caractères en NTFS

oui, j'étais trop faignant pour utiliser (($_.Extension).Length)+1

je me suis dit que ça rallongeait un peu trop la ligne.

[code:1]
get-childitem -Path *.txt |rename-item -NewName {$_.name -replace \&quot;.txt$\&quot;,\&quot;.bat\&quot;} -whatif
[/code:1]
je trouve cette ligne jolie et plus compréhensible.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 2 mois #3599 par Burgun
Merci beaucoup pour vos réponses.

Je m'excuse pour ne pas avoir donné plus de précision sur ma demande et surtout de ne pas avoir fournit de code.
Mais mise à part la commande rename, je n'avais aucune idée de comment procéder.

La dernière proposition de Zylwee m'a permit de faire ce que je voulais. J'ai bien compris la syntaxe, en faite si j'avais mieux réfléchis j'aurai du y penser. Mais comme je ne suis pas familier des regex, je n'ai pas penser à les utiliser.

Merci encore

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.093 secondes
Propulsé par Kunena