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 :

[Débutant] Script pour récuperer les fichiers les plus récents dans une arboressence de repertoire. [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut [Débutant] Script pour récuperer les fichiers les plus récents dans une arboressence de repertoire.
    Bonjour,

    On m'a demandé un outil pour parcourir tous les répertoires (récursivement) à partir d'une racine donnée (mettons c:/listeDossier), et, pour chaque répertoire récupérer seulement le fichier le plus récent à coller dans un autre dossier (genre c:/listeDossier/FichierRecent).

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    c:/listeDossier contient :
    dossier1 --> dossier11 (avec fic1 récent, et fic2 vieux)
                --> dossier12 (avec fic3)
                --> fic4 (vieux)
                --> fic5 (récent)
    dossier2 --> dossier21
                --> dossier22 (avec fic6)
    fic7
    Je veux récupérer dans listeDossier :
    fic1, fic3, fic5 et fic6.

    Etant un absolu et complet novice en shell windows, je me demandais si, par un fabuleux hasard, l'un d'entre vous n'aurai pas quelque chose de ressemblant sans ses vieux tiroirs, quitte à l'adapter un peu.
    Si quelqu'un connait un logiciel qui le fait déjà, ca marche aussi, peu importe la méthode au final.

    Merci d'avance ;-))
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    @echo off
    REM On passe dans le répertoire passé en paramètre.
    pushd "%1"
    REM Scan de tous les sous-répertoires.
    for /D /R . %%A in (*.*) do (
    	REM Recherche du fichier le plus récent.
    	call :scannewest "%%A"
    )
    REM Retour au répertoire d'origine.
    popd
    REM Fin du batch.
    goto :eof
    
    :scannewest
    REM Passage dans le sous-répertoire avec sauvegarde du répertoire courant.
    pushd %1
    REM On va faire un "dir" particulier du répertoire, avec des options contraintes et trié par date.
    REM Note : on "saute" les 5 premières lignes du DIR pour arriver directement au 1er fichier.
    for /F "usebackq tokens=3* skip=5" %%I in (`dir /-C /-P /A-D /O-D`) do (
    	REM On affiche le répertoire, puis le RESTE de la ligne, c'est à dire le nom du fichier (avec ou sans espaces).
    	echo %1 : "%%J"
    	REM On casse la boucle : les autres fichiers ne nous intéressent pas.
    	goto :skip
    )
    :skip
    REM Retour au répertoire précédent.
    popd
    REM Retour à l'appelant.
    goto :eof
    Pas parfait (des "Fichier introuvable" au milieu des sorties, n'impacte pas le résultat final si tu rediriges le "echo" vers un fichier), mais le principe est là.

    Obligé de faire une sous-routine par contre : imbriquer les deux "for" provoquait des problèmes avec la rupture de la 2ème boucle, qui voulait absolument terminer la 1ère au passage...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Oki, merci, avec ça, je devrai pouvoir me débrouiller !
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

  4. #4
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Pas parfait (des "Fichier introuvable" au milieu des sorties, n'impacte pas le résultat final si tu rediriges le "echo" vers un fichier), mais le principe est là.
    Salut,

    "pas tester" mais je ne vois pas de problème avec ton code surtout si on fait
    la copie des fichiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    @echo off
    REM On passe dans le répertoire passé en paramètre.
    pushd "%1"
    REM Scan de tous les sous-répertoires.
    for /D /R . %%A in (*.*) do (
    	REM Recherche du fichier le plus récent.
    	call :scannewest "%%A"
    )
    REM Retour au répertoire d'origine.
    popd
    REM Fin du batch.
    goto :eof
    
    :scannewest
    REM Passage dans le sous-répertoire avec sauvegarde du répertoire courant.
    pushd %1
    REM On va faire un "dir" particulier du répertoire, avec des options contraintes et trié par date.
    REM Note : on "saute" les 5 premières lignes du DIR pour arriver directement au 1er fichier.
    for /F "usebackq tokens=3* skip=5" %%I in (`dir /-C /-P /A-D /O-D`) do (
    	REM On affiche le répertoire, puis le RESTE de la ligne, c'est à dire le nom du fichier (avec ou sans espaces).
    	copy "%~1\%%J" "C:\DossierRecent"
    	REM On casse la boucle : les autres fichiers ne nous intéressent pas.
    	goto :skip
    )
    :skip
    REM Retour au répertoire précédent.
    popd
    REM Retour à l'appelant.
    goto :eof
    voici une autre solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @echo off
    setlocal enabledelayedexpansion
    
    set "relod=" % mettre "-" pour les fichiers les plus anciens "reold=-" %
    
    for /r "C:\ListeDossier" %%x in (.) do (
      set "file=VAR"
      pushd "%%x"
        for /f "delims=" %%F in ('"dir/b/a-d/o%relod%d 2>nul"') do (set file=%%~fF)
        if "!file!" neq "VAR" (echo Copy /y "!file!" "C:\DossierRecent") 
      popd
    )
    
    pause
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    C:\ListeDossier --> dossier source
    C:\DossierRecent --> dossier de destination
    tu peux les mettre comme paramètre, en plus la variable reold te permettra de choisir entre fichier récent ou bien fichiers anciens en lui affectant un "-"
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set "reold=-"   : va copier les fichiers les plus anciens
    set "reold=" :  ne va copier que les fichiers les plus récents
    ** Bonne Continuation **

  5. #5
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Merci beaucoup à vous deux, j'étais effectivement arrivé à la première version de I'm_Here.
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

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

Discussions similaires

  1. Lister les fichiers d'un répertoire dans une feuille Excel
    Par AlainTech dans le forum Contribuez
    Réponses: 3
    Dernier message: 10/03/2016, 14h14
  2. Lister les fichiers d'un répertoire dans une listebox
    Par soshelpvb dans le forum VB.NET
    Réponses: 8
    Dernier message: 05/11/2012, 11h57
  3. Lister les fichiers d'un répertoire dans une feuille Excel
    Par Kriss63 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/04/2011, 14h54
  4. Réponses: 5
    Dernier message: 18/07/2008, 11h28
  5. routine DOS pour sélectionnée le fichier le plus récent
    Par sofiane1111 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 21/09/2007, 10h56

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