Résolu
Suppression fichier si taille
- Mathieu
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 2
- Remerciements reçus 1
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 {}}
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 :
qu'il faut supprimer,E:\telechargements-automatiques\satellite-ir-europe-sat24_202008300650.jpeg
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).
Connexion ou Créer un compte pour participer à la conversation.
- Mathieu
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 2
- Remerciements reçus 1
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}}
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Suppression fichier si taille