Résolu Suppression fichier si taille

Plus d'informations
il y a 2 mois 3 semaines - il y a 2 mois 2 semaines #29995 par Mathieu
Bonjour à tous.

Je viens de m'inscrire sur votre forum. Pour mes travaux personnels (recherche météorologique perso) j'ai besoin de quelques automatisations sur mon PC, et pour ce faire j'ai choisi d'employer Powershell (ça m'a l'air plus puissant qu'en Batch, mais je ne suis pas bien avisé). Je démarre sans base, donc je glane des informations sur le net, aussi j'espère que vous serez indulgents. Cette question va sans doute vous paraître simple, mais moi je n'y entends rien.

Pour faire court, j'ai un petit script PS qui me télécharge chaque heure des images météorologiques satellites, et me les enregistre sur mon PC dans un dossier transitoire. Certaines de ces images sont des fichiers vides, car certaines de ces images ne sont pas encore publiées au moment du téléchargement. Mon objectif est de créer un script PS qui me supprime les images vides (avant de créer un script qui me les triera, mais ce sera pour plus tard...). J'ai pensé au poids du fichier : les images "normales" pèsent au minimum 150 KB, les images vident pèsent moins de 5 KB.

Ca m'avait l'air tellement simple, pourtant :
$dossier = "E:\telechargements-automatiques\dossier-transitoire_sat24"
$tailleMin = 5
Get-ChildItem -Path $dossier -Recurse | ForEach-Object{
    if ($_.Length / 5KB -lt $tailleMin)
    {Remove-Item $_ -Force} else {}}
Ne fonctionne pas (sur un dossier ne contenant que 2 images : l'une "normale", l'autre vide.

J'obtiens un message d'erreur étonnant (pour le néophyte que je suis) :

Remove-Item : Impossible de trouver le chemin d'accès « E:\telechargements-automatiques\satellite-ir-europe-sat24_202008300650.jpeg », car il n'existe pas.
Au caractère E:\telechargements-automatiques\telechargements-automatiques_060min_sat24_traitement.ps1:5 : 6
+ {Remove-Item $_ -Force} else {}}
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (E:\telechargeme...2008300650.jpeg:String) [Remove-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand


Ce qui m'étonne, c'est que je remarque dans le message d'erreur que le chemin d'accès est faux, ce n'est pas :

E:\telechargements-automatiques\satellite-ir-europe-sat24_202008300650.jpeg

qu'il faut supprimer,
mais :

E:\telechargements-automatiques\dossier-transitoire_sat24\satellite-ir-europe-sat24_202008300650.jpeg


Pourtant le chemin d'accès est juste dans ma définition de $dossier. Et de même l'image satellite satellite-ir-europe-sat24_202008300650.jpeg est bien celle qui est "vide" (pas de message d'erreur pour la deuxième image, laquelle est normale et ne doit donc pas être supprimée).

Si par contre, juste pour essayer, je supprime de mon script précédent le code censé traiter mes fichiers, c'est-à-dire que j'écris ceci :
$dossier = "E:\telechargements-automatiques\dossier-transitoire_sat24"
$tailleMin = 5
Get-ChildItem -Path $dossier -Recurse

Et bien cela fonctionne et j'obtiens la liste de toutes mes images, avec leur date de création, leur taille, etc.

Quelqu'un comprend ? Où se situe mon erreur ?

PS : je me doute bien qu'il doit exister un moyen de demander à PS de ne télécharger que les images dont la taille est supérieure ou égale à une certaine valeur, mais je ne sais pas faire, et je n'ai pas trouvé sur le net. Mais j'aimerai quand même bien comprendre pourquoi mon script ne fonctionne pas, l'apprentissage passant par les erreurs (enfin je crois).
Dernière édition: il y a 2 mois 2 semaines par Arnaud Petitjean.

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

Plus d'informations
il y a 2 mois 3 semaines #29996 par Mathieu
Réponse de Mathieu sur le sujet Suppression fichier si taille
La solution fut trouvée sur un autre forum.

La voici, pour ceux que cela intéresse, il suffisait d'ajouter .FullName après $_ :
$dossier = "E:\telechargements-automatiques\dossier-transitoire_sat24"
$tailleMin = 5
Get-ChildItem -Path $dossier -Recurse -File | ForEach-Object{
    if ($_.Length / 5KB -lt $tailleMin)
    {Remove-Item $_.FullName -Force}}
Les utilisateur(s) suivant ont remercié: Arnaud Petitjean

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

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