Question
Renommer les extensions de plusieurs fic. (Résolu)
- Burgun
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 40
- Remerciements reçus 0
il y a 17 ans 2 mois #3587
par Burgun
Renommer les extensions de plusieurs fic. (Résolu) a été créé 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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 2 mois #3589
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Renommer les extensions de plusieurs fichiers
bvivi57 écrit:
Sans code elle est même mystérieuseMa question est toute bête.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Patrick Berthon
-
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 100
- Remerciements reçus 0
il y a 17 ans 2 mois #3592
par Patrick Berthon
Réponse de Patrick Berthon sur le sujet Re:Renommer les extensions de plusieurs fichiers
[code:1]
dir *.txt | ForEach-Object {
$a = ($_.Name).Substring(0,(($_.Name).Length)-4)
mv $_.Name \"$a.bat\"
}
[/code:1]
si tu veux tester, remplace la ligne mv $_.Name \"$a.bat\" par \"$a.bat\" (sauf si -whatif fonctionne pour mv)
(je te conseille de tester, au fait
)
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
dir *.txt | ForEach-Object {
$a = ($_.Name).Substring(0,(($_.Name).Length)-4)
mv $_.Name \"$a.bat\"
}
[/code:1]
si tu veux tester, remplace la ligne mv $_.Name \"$a.bat\" par \"$a.bat\" (sauf si -whatif fonctionne pour mv)
(je te conseille de tester, au fait
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 2 mois #3593
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Renommer les extensions de plusieurs fichiers
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:
Ensuite il y a de nombreuses manières de faire :
[code:1]
get-childitem -Path *.txt |rename-item -NewName {$_.name -replace \".txt$\",\".bat\"} -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 \".txt\". A noter qu'une extension de fichier peut contenir n caractères en NTFS :
[code:1]
Write \"Test PS extension\">Fichier.12345
Write \"Test PS extension\">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,\".bat\"«»))} -whatif
dir *.txt| Ren -N {\"{0}.{1}\" -F $_.BaseName,\"bat\"} -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=\"c:\temp\test\"
dir *.txt| Move-item -destination {\"{0}\{1}.{2}\" -F $Destination,$_.BaseName,\"bat\"} -whatif
[/code:1]
Sinon il y a quelques bugs mineur avec ces 2 cmdlets, voir le site MS-Connect.
Zylwee écrit:
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.[code:1]
dir *.txt | ForEach-Object {
$a = ($_.Name).Substring(0,(($_.Name).Length)-4)
mv $_.Name \"$a.bat\"
}
[/code:1]
Ensuite il y a de nombreuses manières de faire :
[code:1]
get-childitem -Path *.txt |rename-item -NewName {$_.name -replace \".txt$\",\".bat\"} -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 \".txt\". A noter qu'une extension de fichier peut contenir n caractères en NTFS :
[code:1]
Write \"Test PS extension\">Fichier.12345
Write \"Test PS extension\">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,\".bat\"«»))} -whatif
dir *.txt| Ren -N {\"{0}.{1}\" -F $_.BaseName,\"bat\"} -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=\"c:\temp\test\"
dir *.txt| Move-item -destination {\"{0}\{1}.{2}\" -F $Destination,$_.BaseName,\"bat\"} -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.
- Patrick Berthon
-
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 100
- Remerciements reçus 0
il y a 17 ans 2 mois #3596
par Patrick Berthon
je me suis dit que ça rallongeait un peu trop la ligne.
[code:1]
get-childitem -Path *.txt |rename-item -NewName {$_.name -replace \".txt$\",\".bat\"} -whatif
[/code:1]
je trouve cette ligne jolie et plus compréhensible.
Réponse de Patrick Berthon sur le sujet Re:Renommer les extensions de plusieurs fichiers
oui, j'étais trop faignant pour utiliser (($_.Extension).Length)+1A noter qu'une extension de fichier peut contenir n caractères en NTFS
je me suis dit que ça rallongeait un peu trop la ligne.
[code:1]
get-childitem -Path *.txt |rename-item -NewName {$_.name -replace \".txt$\",\".bat\"} -whatif
[/code:1]
je trouve cette ligne jolie et plus compréhensible.
Connexion ou Créer un compte pour participer à la conversation.
- Burgun
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 40
- Remerciements reçus 0
il y a 17 ans 2 mois #3599
par Burgun
Réponse de Burgun sur le sujet Re:Renommer les extensions de plusieurs fichiers
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
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.096 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Renommer les extensions de plusieurs fic. (Résolu)