J'ai plus de 1000 photos que je veux renommer dans "ngimg-" devrait donc donner "NGIMG-1, NGIMG-2, NGIMG-3 ..." et sur et encore jusqu'à la dernière photo.
J'aimerais utiliser PowerShell pour cette tâche au lieu d'installer des applications tierces. P>
J'ai essayé ce code ici, mais ce n'est pas le bon pour cette tâche P>
01/01/2020 = ngimg-1 01/02/2020 = ngimg-2 01/03/2020 = ngimg-3 ...and so on
3 Réponses :
Je formaterais le numéro de comptage avec 4 chiffres, car vous avez (plus de) 1000 images, ils trieront donc correctement après les renommer.
Quelque chose comme ceci: P>
$count = 1
Get-ChildItem -Path 'D:\Test' -Filter '*.jpg' -File |
Sort-Object LastWriteTime |
Rename-Item -NewName { 'ngimg-{0:D4}{1}' -f $script:count++, $_.Extension } -WhatIf
Salut @Theo Merci beaucoup pour prendre le temps de m'aider. Le code que vous avez partagé est parfait! Cependant, j'ai oublié de mentionner dans ma question que ce qui est vraiment important pour moi, c'est que les fichiers sont renommés d'être triés par temps de création. Par exemple, NGIMG-1 = 01/01/2020 NGIMG-2 = 01/02/2020 NGIMG-3 = 01/03/2020 Si vous plus de temps libre, j'apprécierais si vous pouvez mettre à jour le code que vous avez partagé ci-dessus: )
@Theautor dans ce cas, utilisez le CréationTime Code> au lieu de LastwriteTime code>
J'ai copié le code ci-dessus et l'a mis à jour avec la créationTime, mais cela renommer toujours les fichiers au hasard (pas par ordre croissant, date mm / dd / aaaa). :(
J'espère vraiment renommer les fichiers dans l'ordre croissant par date, de sorte que le fichier le plus ancien soit n ° 1 et le dernier sera le dernier et tout le reste entre les deux. Pouvez-vous s'il vous plaît dites-moi comment faire ça?
@Theauuthor Eh bien, mon code trie les fichiers par leur LastwriteTime code> de sorte que le fichier le plus ancien soit en haut. Si vous souhaitez que cela se soit inversé, ajoutez simplement le commutateur code> code> là-bas. La propriété LastwriteTime est la date modifiée que vous voyez dans Explorer. Le format de date que vous mentionnez est pas b> un format tritable. Pour cela, vous voulez AAAA / MM / DD CODE>
@Theauuthor J'ai ajouté des images pour montrer ce qui se passe et pourquoi le code fait ce que vous demandez (renommez le fichier le plus âgé comme n ° 1, suivi du deuxième au plus ancien comme n ° 2, etc.). P.s. Mon PC est néerlandais, le format de date que vous voyez dans les images est DD-MM-AAAAAYY CODE>
qui devrait fonctionner, plus ou moins. Je mettrais des parenthèses autour de la première partie afin qu'il finit en premier (le tri fait probablement la même chose). Je suppose que vous voulez trier par LastwriteTime, car vous ne l'indiquez pas dans la question.
dir | select name,LastWriteTime
Name LastWriteTime
---- -------------
file1.jpg 7/1/2020 10:19:26 AM
file2.jpg 7/1/2020 10:19:30 AM
file3.jpg 7/1/2020 10:19:33 AM
(Dir *.jpg) | sort LastWriteTime | ForEach { $count=1 } { rename-item $_ -NewName ngimg-$count.jpg -whatif; $count++ }
What if: Performing the operation "Rename File" on target "Item: C:\Users\js\foo\file1.jpg Destination: C:\Users\js\foo\ngimg-1.jpg".
What if: Performing the operation "Rename File" on target "Item: C:\Users\js\foo\file2.jpg Destination: C:\Users\js\foo\ngimg-2.jpg".
What if: Performing the operation "Rename File" on target "Item: C:\Users\js\foo\file3.jpg Destination: C:\Users\js\foo\ngimg-3.jpg".
Comme suggéré par @ js2010, je pense que vous devez vous assurer que votre trier code> fonctionne avant la pipelure sur le renommant. Cela se fait facilement avec des parenthèses comme ci-dessous. $count = 1
(Get-ChildItem -Path 'D:\Test' -Filter '*.jpg' -File | Sort CreationTime) | Rename-Item -NewName { 'ngimg-{0:D4}{1}' -f $script:count++, $_.Extension } -WhatIf