Powershell instruction Get-ChildItem

Résolu/Fermé
Edglervo Messages postés 7 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 20 mars 2022 - 16 mars 2022 à 22:10
Edglervo Messages postés 7 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 20 mars 2022 - 20 mars 2022 à 23:33
Bonjour à tous,
Débutant en Powershell, j’utilise la commande

Get-ChildItem -File | select Name,CreationTime

qui me va bien pour lister les fichiers d’un dossier, mais je souhaite une précision de résultat à la milliseconde pour l’heure de création.

Malgré plusieurs jours de recherche, je n’ai pas trouvé comment faire.

Merci par avance :-)

Bonne soirée à tous ,
Ed

5 réponses

brucine Messages postés 17700 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 novembre 2024 2 576
17 mars 2022 à 12:11
Bonjour, personnaliser le format:


Get-ChildItem -File | Select-Object Name,@{n='CreationTime';e={$_.CreationTime.ToString('yyyyMMdd HH:mm:ss.fff')}}


fff prescrit les fractions de seconde à 3 chiffres significatifs:

https://ss64.com/ps/syntax-dateformats.html

La forme du résultat est donc:

Name CreationTime
---- ------------
Sti_Trace.log 20210720 12:16:13.118
0
brucine Messages postés 17700 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 novembre 2024 2 576
17 mars 2022 à 12:17
NB: attention au format de partitions.

La granularité de temps est de 100ns en NTFS mais de 2s en FAT: cette particularité réserve de mauvaises surprises lors de sauvegardes entre partitions hétérogènes, mais fait aussi que connaître le temps de création sous FAT32 à une précision inférieure à la seconde n'a pas de sens.
0
Edglervo Messages postés 7 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 20 mars 2022
18 mars 2022 à 23:43
Bonsoir Brucine,

Effectivement, dans mes recherches, j’avais trouvé le paramètre « fff ». Ce que j’avais lu m’avait également sensibilisé à la différence entre NTFS et FAT32 et j’étais tombé sur le lien que vous m’avez transmis…
Mais je ne savais pas quoi faire de tout ça.

En tout cas, votre solution fonctionne à merveille et me permet de résoudre un problème sur lequel je planchais depuis plusieurs jours !

Mille mercis Brucine !

Au plaisir de vous relire -:),
Bonne soirée,
Ed
0
brucine Messages postés 17700 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 novembre 2024 2 576
19 mars 2022 à 08:16
Note aussi que dans l'exemple que j'ai donné, le résultat n'est qu'un fichier dans C:\Users\xxx (Sti_Trace.log) parce que c'est le seul à ne pas y être système: si je veux aussi sortir les fichiers système, je dois assortir Get-ChildItem du commutateur -Force.
0
Edglervo Messages postés 7 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 20 mars 2022
19 mars 2022 à 22:23
Bonsoir Brucine,

Merci pour cette nouvelle précision que je note !
Mais dans le cas présent, c’est un ensemble de MP3 dont je veux modifier les dates de création à la milliseconde.
Avec la solution que vous m’avez donnée et mes petites bidouilles sous Excel et mes batch DOS, j’arrive à mon résultat.

Merci encore !

Bonne soirée,
Ed
0
Edglervo Messages postés 7 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 20 mars 2022
20 mars 2022 à 00:31
Re-Bonsoir Brucine,

A mon tour de rajouter une petite précision…

Quand je lance votre commande dans le dossier qui contient mes Mp3, je n’obtiens que l’affichage des noms et pas la date de création !
Et de nombreux noms sont tronqués (certains peuvent avoir plus de 100 caractères).

J’imagine qu’il doit y avoir une histoire de buffer là-dessous et qu’il faudrait préciser la taille des lignes que l’on désire lister…

Pour ma part, j’ai résolu le problème en renommant mes fichiers avec un numéro (de 0001.mp3 à xxxx.mp3). Là, votre commande affiche bien tout ce que j’attends.
J’utilise son résultat pour modifier les dates de création de mes Mp3 puis je remets leurs noms d’origine.

C’est un peu de manip, mais c’est positif, parce que ça fait travailler les neurones :-) !

Ed
0
brucine Messages postés 17700 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 novembre 2024 2 576
20 mars 2022 à 08:06
Bonjour,

S'il s'agit d'un bug lié aux chemins d'accès longs (limite de 260 caractères incluant noms des lecteurs, slashs...) l'existence d'espaces intempestifs dans le nom des fichiers (préférer un tiret) en rajoute mais, même sans, on va observer quelque chose de ce type:

musique.mp3 -> musiqu~1.mp3

Mais cela ne devrait pas affecter le champ suivant (date), sauf pour la commande à ne sélectionner que ce qui se trouve sur une ligne.

Dans ce cas, pas de solution sauf comme remarqué de donner aux morceaux des titres suffisamment courts et que le chemin d'accès global le soit lui aussi (sous-dossiers, emplacement plus volontiers à la racine d'une partition que sous \Users\tartempion\Documents\...); tenter de modifier le registre en conséquence:
https://www.programmez.com/actualites/windows-10-les-noms-de-fichiers-ne-seront-plus-limites-260-caracteres-24452
Je n'y crois pas trop, le problème est plus volontiers intrinsèque à PowerShell.

Cette question est notamment évoquée ici:
https://stackoverflow.com/questions/25326821/get-childitem-truncates-name-fullname-prior-to-format
où il est suggéré d'utiliser le commutateur -Expand...et sans succès puisque ce n'est pas l'affichage du nom qui est tronqué mais sa création elle-même: ce comportement est lié au fait que PowerShell retourne un "Object" (de taille limitée) et pas une chaîne de caractères qui elle n'en a pas.

Une pirouette consisterait à s'affranchir de la limite de grille de la sortie PowerShell via un commutateur Out-Gridview:
https://community.spiceworks.com/topic/1651493-get-childitem-without-limiting-fullname

Une autre solution passerait par différents commutateurs:
Format-Table -Wrap -Autosize ne changerait pas la situation de manière cohérente, à tenter.
Une alternative serait d'empêcher le nom d'être tronqué via -ExpandProperty FullName redirigé par Out-File
On peut aussi spécifier le nombre de caractères de sortie avec Format-Table suivi de (Out-String ou Out-File) -width nnnn
Une solution imparable serait ConvertTo-Csv puisque par définition CSV embarque des chaînes, pas des objets.

https://superuser.com/questions/1049531/how-to-fix-truncated-powershell-output-even-when-ive-specified-width-300

Enfin, on pourrait plus globalement se défaire de la limite du nombre de caractères de sortie PowerShell en modifiant la variable FormatEnumerationLimit:

$FormatEnumerationLimit = -1

https://mcsaguru.com/powershell-output-truncated
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Edglervo Messages postés 7 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 20 mars 2022
20 mars 2022 à 23:33
Bonsoir Brucine,

Un grand merci pour votre réponse impressionnante et toutes les riches informations qu’elle contient !

Avec elles, il y a plusieurs solutions pour s’affranchir de cette f***** limite de 260 caractères qui nous empoisonne la vie depuis si longtemps…
Et ce n’est pas un euphémisme car bien que très sensibilisé à ce problème, j’arrive encore à me faire piéger. Le fait de travailler sur plusieurs machines et plusieurs OS (XP, 7 et 10) n’arrange rien…
Mais bon, comme je vous le disais précédemment, ça fait travailler les neurones et c’est une bonne chose !

En tout cas, grâce à vous, j’ai pu modifier les dates de mes Mp3 comme je le souhaitais ! Merci encore :-).

Bonne soirée ou plutôt bonne matinée…

Ed
0