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 :

tester les attributs


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Par défaut tester les attributs
    bonjours a tous,

    j'aimerai executer une commande sur des dossier ayant l'attribut "archive" et fichier caché.

    j'ai trouver sur internet du code mais je ne le comprend pas vraiment

    y auttait il une ame charitable pour me l'expliquer et m'aider a la mettre a ma sauce ^^
    merci

    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
    @echo OFF
    
    SETLOCAL enableextensions enabledelayedexpansion
    
    set INPUT=test*
    
    for %%F in (%INPUT%) do (
        set ATTRIBS=%%~aF
        set CURR_FILE=%%~nxF
        set READ_ATTRIB=!ATTRIBS:~1,1!
    
        @echo File: !CURR_FILE!
        @echo Attributes: !ATTRIBS!
        @echo Read attribute set to: !READ_ATTRIB!
    
        if !READ_ATTRIB!==- (
            @echo !CURR_FILE! is read-write
        ) else (
            @echo !CURR_FILE! is read only
        )
    
        @echo.
    )
    PS: ce code est prévu pour une lecture seule...

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SETLOCAL enableextensions enabledelayedexpansion
    Set à utiliser un environnement local avec toutes les extensions de commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        set ATTRIBS=%%~aF
        set CURR_FILE=%%~nxF
        set READ_ATTRIB=!ATTRIBS:~1,1!
    La substitution "%%~aF" sert à obtenir les attributs du fichier pointé actuellement par "%%F". La valeur de cette substitution est une chaine contenant les attributs à une position donnée (ex : "-rahs----").
    Donc, on utilise la substitution "~1,1" pour récupérer une lettre [deuxième "1"] après un décalage d'une lettre vers la gauche [premier "1"], qui correspond en l'occurence au flag "R", Lecture seule.
    La substitution "%%~nxF" sert à obtenir uniquement le nom du fichier plus son extension.

    Ce test sert à savoir si l'attribut en question est mis ("r") ou non ("-"). Les "!" autour de la variable servent pour l'expansion différée, c'est nécessaire si tu as défini la variable juste avant comme c'est le cas ici.

    Le problème que tu vas avoir, c'est que "for" ne te listera PAS les fichiers cachés... Il va donc falloir ruser un petit peu pour obtenir cette liste, en passant par exemple par "dir" qui, lui, pourra lister les fichiers cachés.

    Donc, on obtient :
    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
    @echo OFF
    
    SETLOCAL enableextensions enabledelayedexpansion
    
    set INPUT=test*
    
    for /F "usebackq tokens=*" %%F in (`dir /b /a /-p %INPUT%`) do (
    	set ATTRIBS=%%~aF
    	set CURR_FILE=%%~nxF
    	set ARCH_ATTRIB=!ATTRIBS:~2,1!
    	set HIDE_ATTRIB=!ATTRIBS:~3,1!
    	
    	echo File: !CURR_FILE!
    	echo Attributes: !ATTRIBS! / A:!ARCH_ATTRIB! / H:!HIDE_ATTRIB!
    	
    	set PROCESS=
    	if NOT !ARCH_ATTRIB!==- if NOT !HIDE_ATTRIB!==- set PROCESS=1
    	if NOT "!PROCESS!"=="" (
    		echo !CURR_FILE! WILL BE PROCESSED !
    		REM Specific processing here, use "%%F" as file name.
    		echo Specific processing of "%%F"...
    	) else (
    		echo !CURR_FILE! will be ignored.
    	)
    	
    	echo.
    )
    Les points importants :
    • Le FOR exécute désormais une commande, et travaille sur le résultat (à l'écran) de cette commande au lieu d'utiliser directement un filtre de fichiers.
      Le fait de mettre "tokens=*" permet de traiter toute la ligne d'un coup, ce qui correspond à un nom de fichier complet (même s'il contient des espaces).
    • La commande "`dir /b /a /-p %INPUT%`" (note les "`" au lieu de "'") sert à avoir un listing court, sans appui de touches ni filtrage par attributs des fichiers courants du répertoire correspondant au critère "%INPUT%".
    • ARCH_ATTRIB et HIDE_ATTRIB sont calculés comme avec ton exemple initial, sauf que bien sûr on utilise comme indicateur de position le bon...
    • Le double "IF" permet de faire un ET logique des deux conditions, afin de ne traiter que les fichiers ayant les deux attributs positionnés.
    • La variable PROCESS permet de différer (un peu) le traitement effectif et d'avoir un batch plus propre. Si elle est vide, le fichier ne devra PAS être traité. Sinon, il le sera.


    On peut simplifier le traitement en mettant "/A:AH" au lieu de "/A" comme argument du "dir", et dans ce cas, seuls les fichiers adéquats seraient remontés. Toutefois, même si c'est sûrement la solution la plus efficace, c'est pas forcément la plus didactique...

    En version "light" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @echo OFF
    
    SETLOCAL enableextensions enabledelayedexpansion
    
    set INPUT=test*
    
    for /F "usebackq tokens=*" %%F in (`dir /b /a:ah /-p %INPUT%`) do (
    	echo "%%F" WILL BE PROCESSED !
    	REM Specific processing here, use "%%F" as file name.
    	echo Specific processing of "%%F"...
    	echo.
    )
    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 averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Par défaut
    waouh merci beaucoup

    je n'en attendais pas temps.

    J'ai très bien compris le code
    merci beaucoup grâce a cela j'ai pu améliorer mes connaissance en batch

    encore merci

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par bubu87 Voir le message
    encore merci
    De rien. Mais le bouton sert aussi à remercier, utilises-le dès que c'est réglé pour toi, en plus ça indique aux autres que la question a été traitée complètement et peut donc plus les inciter à aller lire ce qui a été dit...
    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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Par défaut
    opu désolé un oubli

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

Discussions similaires

  1. [AC-2003] Tester les attributs d'une relation ?
    Par marot_r dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/03/2010, 22h01
  2. [VB6]Enumérer les attributs et les méthodes d'une classe
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 04/05/2004, 18h34
  3. [JUnit] Pour tester les methodes d'acces à une sgdb
    Par yanis97 dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 15/04/2004, 15h55
  4. [VBA-E]modifier les attributs d'un commentaire dans une cellule
    Par Olivier vb dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/03/2004, 10h26
  5. Retrouver les attributs d'un noeud...
    Par LLaurent dans le forum XMLRAD
    Réponses: 2
    Dernier message: 18/12/2003, 09h20

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