papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Qui connait FORFILES ? Sam 21 Mar 2015 - 17:56 | |
| Connaissez-vous FORFILES ? Oui, non, pas assez ? Personnellement je la connais superficiellement pour avoir joué avec elle il y a bien des années. Je vous dis dès le début : elle est FORMIDABLE ! Et l’essayer c’est l’adopter. Avez-vous deviné de quoi je parle ? Je parle d’une commande native dans Vista, W7 et W8. Cette commande sert à sélectionner et exécuter une certaine tâche sur un fichier ou un ensemble de fichiers. Elle rend de beaux services quand on l’utilise pour le traitement par lots. Le code suivant donne la syntaxe de cette commande et propose quelques exemples de son utilisation et c'est à vous d'en imaginer d'autres. - Code:
-
rem ============================================================================ rem Exemples pour utiliser la commande ForFiles rem Par Papydall rem ============================================================================ rem FORFILES est une commande native dans Vista, W7, W8 rem Elle sert à sélectionner et exécuter une commande sur un fichier ou un rem ensemble de fichiers. rem Cette commande est utile pour le traitement par lots. rem ============================================================================ ' Syntaxe de la commande FORFILES: rem forfiles [/p <Path>] [/m <SearchMask>] [/s] [/ c "<Command>"] [/d [{+ |-}] [{<Date> | <Days>}]]
rem /p <Path> :' Spécifie le chemin d'accès à partir duquel commencer la recherche. ' Par défaut, la recherche commence dans le répertoire de travail actuel.
rem /m <SearchMask> : ' Recherche des fichiers en fonction du masque de recherche spécifié. ' Le masque de recherche par défaut est *.*
rem /s : ' Indique à la commande forfiles de rechercher dans les sous-répertoires ' de manière récursive.
rem /c "<Command>" : ' Exécute la commande spécifiée sur chaque fichier. ' Les chaînes de commande doivent être placés entre guillemets. ' La commande par défaut est "cmd /c echo @file".
rem /d [{+ |-}] [{<Date> | <Days>}] : ' Sélectionne les fichiers avec une date ' de dernière modification dans le délai spécifié. ' Sélectionne les fichiers avec une date de dernière modification postérieure ou égale à (+) ' ou antérieure ou égale (-) à la date spécifiée, dont la Date est au format MM/JJ/AAAA. ' Sélectionne des fichiers avec une date de dernière modification postérieure ou égale à (+) ' la date du jour plus le nombre de jours spécifié, ou antérieure ou égale à (-) ' la date actuelle moins le nombre de jours spécifié. ' Les valeurs valides pour les jours incluent n'importe quel nombre dans la plage 0 à 32768 (89 années). ' Si aucun signe n'est spécifié, + est utilisé par défaut. rem ============================================================================ ' Forfiles est plus couramment utilisé dans les fichiers batch. ' Forfiles /s est similaire à dir /s. ' Vous pouvez utiliser les variables suivantes dans la chaîne de commande tel ' que spécifié par l'option de ligne de commande /c . rem @FILE : ' Nom de fichier. rem @FNAME : ' Nom de fichier sans extension. rem @EXT : ' Extension de nom de fichier. rem @PATH : ' Chemin d'accès complet du fichier. rem @RELPATH: ' Chemin d'accès relatif du fichier. rem @ISDIR : ' Retourne la valeur TRUE si un type de fichier est un répertoire. ' Sinon, FALSE. rem @FSIZE : ' Taille du fichier, en octets. rem @FDATE : ' Date de dernière modification du fichier. rem @FTIME : ' Heure de dernière modification du fichier. rem =========================================================================== ' Pour inclure un caractère spécial dans la commande,on utilise le code hexa ' au format : 0xHH ' Exemples: ' 0x09 : une tabulation ' 0x22 : double quote " ' "c:\ Program Files" devient ^0x22c:\Program^ Files\ ^0x22 rem ============================================================================ rem ============================================================================ rem ============================================================================ dim commande$,rep$,titre$,q$ ,s$ full_space 0 q$ = chr$(34) rep$ = "c:\users\acer\desktop\panoramic" : ' ou rep$ = dir_current$ : ' Répertoire de travail à modifier selon votre cas memo 1 : bar_both 1 : font_bold 1 : font_color 1,0,0,255 top 1,50 : left 1,100 : width 1,width(0)-200 : height 1,height(0)-200 font_bold 0 : font_size 0,16 alpha 2 : top 2,height(1)+50 : left 2,200 caption 2, "!!! Veuillez patienter .... Le traitement peut être long !!!" alpha 3 : top 3,10 : left 3,100
rem ============================================================================ ' Voici quelques exemples pour utiliser la commande FORFILES ' Pour chaque exemple, supprimer les apostrophes (rem) avant commandes et avant titre$ rem ============================================================================ rem Pour répertorier tous les fichiers texte du dossier en cours et des ses sous-dossiers commande$ = "forfiles /p "+rep$+" /s /m *.txt /c "+q$+"cmd /c echo @path 0x09 0x09 est un fichier texte"+q$ titre$ = "Liste de tous les fichiers TXT du dossier «"+rep$ +"» et des ses sous-dossiers" rem ============================================================================
rem ============================================================================ rem Pour répertorier tous les dossiers du répertoire en cours ' commande$ = "forfiles /p "+rep$+" /m * /c "+q$+"cmd /c if @isdir == TRUE echo @file est un dossier"+q$ ' titre$ = "Liste de tous les dossiers du dossier «"+rep$+"»" rem ============================================================================
rem ============================================================================ rem Pour répertorier tous les fichiers qui ont au moins un an dans le répertoire en cours ' commande$ = "forfiles /p "+rep$+" /m *.* /d -365 /c "+q$+"cmd /c echo @file a au moins un an."+q$ ' titre$ = "Liste de tous les fichiers qui ont au moins un an dans le répertoire : «"+rep$+"»" rem ============================================================================
rem ============================================================================ rem Pour afficher le texte "est obsolète" pour chacun des fichiers dans le rem répertoire en cours et ses sous-répertoires qui sont plus anciens que le 1er janvier 2010 ' commande$ = "forfiles /p "+rep$+" /s /m *.* /d -01/01/2010 /c "+q$+"cmd /c echo @path est obsolète."+q$ ' titre$ = "Liste de tous les fichiers du répertoire en cours et ses sous-répertoires qui sont plus anciens que le 1er janvier 2010" rem ============================================================================
rem ============================================================================ rem Pour répertorier les extensions de nom de fichier de tous les fichiers dans le rem répertoire courant au format de colonne et ajouter une tabulation avant l'extension ' commande$ = "forfiles /m *.* /c "+q$+"cmd /c echo l'extension de @file 0x09est 0x09@ext"+q$ ' titre$ = "Extensions de tous les fichiers du répertoires en cours" rem ============================================================================
rem ============================================================================ rem Pour supprimer le fichier TestFich.txt si il est vieux de 5 jours ou plus rem forfiles /m TestFich.txt /c "cmd /c Del TestFich.txt " /d -5 ' commande$ = "forfiles /m TestFich.txt /c "+q$+"cmd /c Del Testfich.txt "+q$+" /d -5" ' titre$ = "Suppression du fichier TestFich.txt s'il existe et s'il est vieux de 5 jours ou plus" rem ============================================================================
rem ============================================================================ rem Pour trouver tous les fichiers .jpg modifiés depuis 30 jours ou plus et ajouter rem une tabulation avant le texte modifié depuis... ' commande$ = "forfiles /p "+rep$+" /s /m *.jpg /C "+q$+"cmd /c echo @path 0x09modifié depuis 30 jours (ou plus)"+q$+" /D -30" ' titre$ = "Liste de tous les fichiers .jpg du répertoire : «"+rep$+ "» et de ses sous-répertoires modifiés de puis 30 jours ou plus" rem ============================================================================
rem ============================================================================ rem Pour lister le nom et la taille de tous les fichiers .doc du répertoire rem courant et de ses sous-répertoires éventuels en ajoutant une tabulation rem entre le nom et la taille du fichier ' commande$ = "FORFILES /S /M *.doc /C "+q$+"cmd /c echo @file 0x09 @fsize"+q$ ' titre$ = "Lister le nom et la taille de tous les fichiers .doc en ajoutant une tabulation entre le nom et la taille du fichier" rem ============================================================================
caption 3, titre$ Exec_ForFile(commande$,titre$) caption 2,""
end rem ============================================================================ SUB Exec_ForFile(commande$,titre$) execute_wait "cmd /c" + commande$ + " | clip" s$ = clipboard_string_paste$ if s$ = "" then s$ = "Aucun fichier ne satisfait à la demande" item_add 1,titre$ : item_add 1,s$
END_SUB rem ============================================================================
| |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Qui connait FORFILES ? Sam 21 Mar 2015 - 19:54 | |
| | |
|