-1
votes

PowerShell: Comment lot Renommer des fichiers dans l'ordre chronologique et trié par date

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


0 commentaires

3 Réponses :


1
votes

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


6 commentaires

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 au lieu de LastwriteTime


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 de sorte que le fichier le plus ancien soit en haut. Si vous souhaitez que cela se soit inversé, ajoutez simplement le commutateur 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 un format tritable. Pour cela, vous voulez AAAA / MM / DD


@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



1
votes

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".


0 commentaires

1
votes

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


0 commentaires