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 :

Lister les dossiers créés ou modifiés depuis une date [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut Lister les dossiers créés ou modifiés depuis une date
    Bonjour à tous,

    Je pense que cette tâche est faisable en Batch, mais je dois avouer que je n'ai pas le niveau pour écrire ce code.
    Voici ce que je souhaiterais : lister dans un fichier texte tous les sous-dossiers d'un répertoire (avec leur chemin complet) créés ou modifiés depuis une date donnée (en paramètre).
    Je parle bien des "dossiers" et non des "fichiers".
    J'aimerais ajouter dans ce fichiers texte la date de création/modification.

    Voici l'exemple de contenu que je souhaiterais pour le TXT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CHEMIN;DATE_MODIF
    \\CHEMIN\DOSSIER\SOUS-DOSSIER A\;2017-04-10
    \\CHEMIN\DOSSIER\SOUS-DOSSIER B\;2017-04-09
    ...;...
    ...;...
    (j'ai mis un séparateur point-virgule, mais peu importe)

    Est-ce que quelqu'un aurait la gentillesse de m'aider sur cette tâche ?

    Pour ne pas partir d'une feuille blanche et chercher un peu de mon côté, voici quelque chose qui liste les fichiers ET dossiers (alors que je ne voudrais que les dossiers) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @echo off
    for /f "delims=" %%a In ('dir /b/s  "\\CHEMIN\DOSSIER\" ') Do (
    		echo %%a >> \\CHEMIN\DOSSIER\liste.txt
    )
    Merci à vous !

    Sylvain M.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Voici pour n'afficher que les dossiers
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    dir /b /s /ad  "\\CHEMIN\DOSSIER\"

    Sinon c'est quelle date alors qui t’intéresse ? Pacque création et modification ce sont deux dates différentes.

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Sinon en Powershell c'est fait en une ligne ce que tu souhaite.

    A réfléchir.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    > Sinon c'est quelle date alors qui t’intéresse ?
    La date de modification en priorité, mais finalement les deux seraient utiles.

    Pour le powershell je ne suis pas fermé, je ne connais juste pas encore ! (l'idée est de programmer cette tâche dans une tache planifiée de Windows)

    Merci beaucoup en tout cas !
    (Je pars une semaine en vacances : je testerai ça à mon retour)

    À bientôt.

    Sylvain M.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Me voici de retour

    Encore merci ericlm128 pour ton aide.
    Avec l'option /ad, je ne récupère donc bien que les dossiers.

    Mais bon, il me reste encore à :
    - ajouter la (les) date(s) de création (et/ou modification)
    - filtrer uniquement sur les fichiers créés (ou modifiés) depuis une période donnée (ex. "semaine dernière")

    J'ai cherché (quand même !), mais je dois avouer que je ne parviens pas à grand chose...

    J'ai vu que la commande "forfiles" (lien) disposait d'options sur les dates : est-ce que ce serait une bonne piste ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Oui la commande forfiles se rapproche le plus nativement de ce que tu veux faire.
    Je regarderai plus en détail un peu plus tard.

    Je te proposerai aussi un script powershell, plus fiable plus rapide plus simple.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par ericlm128
    Je regarderai plus en détail un peu plus tard.
    Je te proposerai aussi un script powershell, plus fiable plus rapide plus simple.
    Merciiiii d'avance !!!

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Voici un batch qui devrait fonctionner mais qui ne semble pas fonctionner pour le moment :

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @echo off
    set outfile=%~dp0outfile.txt
    echo CHEMIN;DATE_MODIF>%outfile%
    forfiles /S /D -10 /C "cmd /c If @isdir==TRUE echo @path;@fdate>>%outfile%"

    Et un script powershell qui fonctionne
    Pour l'exécuter il fait autoriser l'exécution des scripts powershell (.ps1)
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -Path "."| Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -Path ".\expo.txt" -NoTypeInformation

    Explication rapide :
    Get-ChildItem -Path "." -> Récupère tous les items (fichier et dossier) dans le dossier courant (".")
    Where-Object -> Conserver les items qui ...
    $_.PSIsContainer -eq $true -> sont de type conteneur (dossier)
    $_.LastWriteTime -ge (Get-Date).AddDays(-10) -> ont une date de modification dans les 10 derniers jours
    Select-Object FullName, CreationTime, LastWriteTime -> Garder les informations sur le nom complet, la date de création, la date de modification
    Export-Csv -Delimiter ";" -Path ".\expo.txt" -NoTypeInformation -> Exporter ce résultat avec le délimiteur ";", dans un fichier "expo.txt" sans conserver le type d'information.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Merci Eric

    J'ai tenté les 2 scripts, mais je rencontre quelques petits problèmes :

    - Pour le BAT : il fonctionne bien, mais ne filtre pas sur les dossier modifiés depuis 10 jours (/D -10). J'ai essayé avec ou sans espace entre D et -10, avec D majuscule ou minuscule, rien n'y fait : tous les dossiers sont listés...

    - Pour le Powershell : il fonctionne, mais bien que je ne l'ai pas modifié, il scanne le dossier C:\ au lieu du dossier courant (".")
    Mon fichier Powershell se trouve dans un dossier sur un serveur en réseau (chemin UNC : \\serveur\dossier) mais avec un lecteur réseau (S:\dossier).
    Peut-être que cela vient de là ?
    (par contre, contrairement au BAT, les dossiers scannés sont bien filtrés par la date)

    Merci encore, en espérant que l'une des deux solutions pourra marcher !

  10. #10
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Oui c'est le problème que j'ai rencontré avec le .bat. il ne filtre pas alors qu'il le devrait.
    Je suppose que ça fonctionne qu'avec les fichier.

    Pour le powershell ce n'est pas grand chose.
    Tu peux :
    Remplacer le "." par le chemin que tu souhaites
    Ou
    (Split-Path -parent $PSCommandPath)

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par ericlm128
    Tu peux :
    Remplacer le "." par le chemin que tu souhaites
    Désolé, mais ne connaissant pas trop l'écriture des scripts powershell, je n'arrive pas à écrire correctement le chemin.
    J'ai tenté en écrivant "\\serveur\chemin\dossier" ou "S:\chemin\dossier\", mais la fenêtre powershell s’exécute avec un message d'erreur rouge, que je n'ai pas le temps de lire.

    edit :
    J'ai fini par réussir une capture d'écran au moment du message, et cela me dit :
    Citation Envoyé par powershell.exe
    Export-Csv : impossible d'effectuer l'opération, car le chemin contenant des caractères génériques \\serveur\chemin\dossier\expo.txt n'a été résolu en aucun fichier.[...]
    Je me demande si cela ne viendrait pas du fait que dans mon chemin, j'ai un dossier avec ces caractères : "[]" (\\serveur\chemin\[dossier parent]\dossier\)

    Est-il possible de contourner ce problème ?

  12. #12
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Ça ne devrait pas, tu peux poser le chemin exact ?

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Pour l'instant, c'est un dossier de tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Get-ChildItem -Path "\\serveur-sig\SIG\[ADMIN_SIG]\"| Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -Path "\\serveur-sig\SIG\[ADMIN_SIG]\expo.txt" -NoTypeInformation
    Testé avec S:\[ADMIN_SIG]\ ou \\serveur-sig\SIG\[ADMIN_SIG]\

  14. #14
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Tu as raison ça vient des crochets.



    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -Path "\\serveur-sig\SIG\``[ADMIN_SIG``]\"| Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -Path "\\serveur-sig\SIG\``[ADMIN_SIG``]\expo.txt" -NoTypeInformation

    ou

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -LiteralPath "\\serveur-sig\SIG\[ADMIN_SIG]\"| Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -LiteralPath "\\serveur-sig\SIG\[ADMIN_SIG]\expo.txt" -NoTypeInformation

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Merci,
    Malheureusement, je viens de tester les 2 solutions, et j'ai encore des messages d'erreur (je galère à faire les copies d'écran pour pouvoir lire le message : y aurait-il une solution pour récupérer l'erreur avant que le message disparaisse ?) :

    Solution 1 : (``[ADMIN_SIG``) :
    Nom : error1_dbl_escape.png
Affichages : 4929
Taille : 45,8 Ko

    Solution 1bis (`[ADMIN_SIG`) :
    Nom : error2_spl_escape.png
Affichages : 4951
Taille : 112,5 Ko

    Solution 2 : (-LiteralPath) :
    Nom : error3_litteral.png
Affichages : 4893
Taille : 71,9 Ko

    Désolé pour mon cas finalement compliqué...

  16. #16
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Non, LiteralPath n'est pas disponible dans les premières versions de Powershell.
    Nous avons donc des version différentes.

    Essaie ceci, avec un échappement simple
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -Path "\\serveur-sig\SIG\`[ADMIN_SIG`]\"| Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -Path "\\serveur-sig\SIG\`[ADMIN_SIG`]\expo.txt" -NoTypeInformation

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Essaie ceci, avec un échappement simple
    Malheureusement, c'est ce que j'avais testé précédemment (solution "1bis" ci-dessus)... Mais ça ne lui plait pas... (cf. message d'erreur)

  18. #18
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Pourrait tu créer le dossier sur C: et tester ces codes STP.

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -Path "\\serveur-sig\SIG\`[ADMIN_SIG`]\"| Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -Path "C:\`[ADMIN_SIG`]\expo.txt" -NoTypeInformation

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -Path "\\serveur-sig\SIG\`[ADMIN_SIG`]\"| Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -Path "C:\expo.txt" -NoTypeInformation

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -Path "\\serveur-sig\SIG\``[ADMIN_SIG``]\"| Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -Path "C:\expo.txt" -NoTypeInformation

    Sans l'export, il n'y a pas d'erreur ?
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -Path "\\serveur-sig\SIG\`[ADMIN_SIG`]\"| Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Merci Eric pour toutes ces propositions,

    J'ai tout testé, mais j'ai généralement un message d'erreur rouge...

    Sauf
    - le 2e code qui écrit bien un fichier expo.txt dans C:\, mais ce dernier est vide...
    - le dernier : je ne vois pas de rouge, mais la fenêtre se ferme sans que je ne vois rien à l'écran...

    Dans tous les cas, il est impossible à chaque fois de lire les messages rouges : la fenêtre se ferme instantanément après l'avoir affiché (les copies d'écran précédentes ont été faites après de multiples tentatives, pour synchroniser la capture et le message qui ne dure que quelques centièmes de seconde...)

    As-tu une solution pour conserver ce message plus longtemps ou l'enregistrer dans un log ?

  20. #20
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Oui tu peux :
    "Démarrer" -> "Rechercher les programm..." -> "Powershell" tu trouvera la console à "Windows PowerShell".

    Il te suffit de taper la commande ou lancer ton script .ps1.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2007] Lister les requêtes contenant un critère sur une date
    Par Beren69 dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/12/2012, 21h53
  2. recuperer les objets créés en fonction d'une date
    Par decksroy dans le forum Toad
    Réponses: 1
    Dernier message: 22/02/2008, 10h45
  3. Trouver les fichiers modifiés depuis une date/heure précise
    Par sinok dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 18/07/2006, 17h56
  4. |VB6] Comment Lister les liens vers des fichiers d'une page web
    Par Mayti4 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/01/2005, 18h17
  5. Réponses: 4
    Dernier message: 16/09/2003, 10h51

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