IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Suppression fichier si existe dans un autre dossier [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre régulier
    Homme Profil pro
    Climatologie
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Climatologie

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Par défaut Suppression fichier si existe dans un autre dossier
    Bonjour à tous,

    Dans le même contexte que mon post précédent (Suppression fichier si taille, téléchargement automatique d'images météorologiques pour travaux climatologiques perso), j'ai besoin de créer un script qui vérifie si des fichiers téléchargés dans un dossier x existent déjà dans un dossier y.
    Pour mémoire, j'ai donc un script qui me télécharge à intervalle régulier toute une foule d'images météos. Ces fichiers se retrouvent dans un dossier transitoire, et doivent être classés par nom dans un dossier définitif. Ce que je cherche à faire, c'est rajouter dans ce script une fonction qui vérifie si le fichier téléchargé existe déjà dans le dossier définitif, si oui alors il faut le supprimer du dossier transitoire, et si non alors il faut le transférer dans le dossier définitif.

    En cherchant sur google et auprès de nos collègues anglosaxons, j'ai bricolé ceci :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -Recurse -path $dossierTransitoire -filter "$nom*.jpeg" | ForEach-Object {If ((Test-Path "$dossierDefinitif\$_")) {Remove-Item $_.FullName -Force} Else {Move-Item -Destination $dossierDefinitif}}

    Bien entendu, cela ne fonctionne pas. En fait, j'ai l'impression que tout se passe comme si :
    - une liste des fichiers présents dans le dossier transitoire est bien créée,
    - mais si l'un des fichiers du dossier transitoire existe déjà dans le dossier définitif, alors tous les fichiers du dossier transitoire sont supprimés.

    Ce qu'il faudrait faire :
    - si le fichier nom1 existe déjà dans le dossier définitif, alors supprimer le fichier nom1 du dossier transitoire, sinon le transférer dans le dossier définitif,
    - si le fichier nom2 existe déjà, alors supprimer nom2 sinon le transférer,
    - ...etc...
    - si le fichier nom1000 existe déjà, alors supprimer nom1000 sinon le transférer...

    Je suppose que la "fonction" Test-Path n'est pas celle qui convient dans la condition If, mais je ne sais quelle fonction employer. Par ailleurs je reste maladroit avec "l'argument" $_ car je ne comprends pas exactement à quelle valeur il renvoie.

    Une idée ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Sans vraiment avoir analyser ton code je dirai comme ceci
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -Recurse -path $dossierTransitoire -filter "$nom*.jpeg" | ForEach-Object {If ((Test-Path "$dossierDefinitif\$($_.Name)")) {Remove-Item $_.FullName -Force} Else {Move-Item -Path $_.FullName -Destination $dossierDefinitif}}

    Par ailleurs je reste maladroit avec "l'argument" $_ car je ne comprends pas exactement à quelle valeur il renvoie
    Dans ton cas c'est Get-ChildItem qui passe des objets après le pipe |
    Les objets seront donc du type transmit par Get-ChildItem, pour le connaitre tu peux faire Get-ChildItem | gm
    Ils sont de type System.IO.DirectoryInfo (dossier) ou System.IO.FileInfo (fichier)
    La commande t'affiche aussi toutes les propriétés et méthodes que tu peux utiliser, tu trouvera leur détails sur la doc Microsoft. Attention Powershell ajoute souvent des propriétés visible avec | gm
    https://docs.microsoft.com/fr-fr/dot...ew=netcore-3.1
    https://docs.microsoft.com/fr-fr/dot...ew=netcore-3.1

    Ils suffit de choisir celle qui t’intéresse ou celle attendu par une autre commande
    Par exemple la taille pour un fichier c'est Length : https://docs.microsoft.com/fr-fr/dot...ew=netcore-3.1

  3. #3
    Membre régulier
    Homme Profil pro
    Climatologie
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Climatologie

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Par défaut
    Une nouvelle fois, mille merci de tout coeur pour votre aide et votre temps.

    Le $($_.Name) il faut quand même aller le chercher loin quand on démarre sans base avec PS... Mais en tout cas maintenant les choses m'apparaissent beaucoup plus clairement.

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/01/2015, 18h02
  2. Fichier dans un autre dossier
    Par melreg dans le forum Fortran
    Réponses: 2
    Dernier message: 08/04/2009, 15h02
  3. Réponses: 5
    Dernier message: 09/10/2008, 14h26
  4. transférer des fichiers dans un autre dossier de façon dynamique
    Par soria_t dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 08/08/2008, 16h28
  5. Réponses: 4
    Dernier message: 28/11/2007, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo