Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
860 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [batch]fichiers modifiés après une certaine date

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[batch]fichiers modifiés après une certaine date

n°1784041
skalimero3​1
Posté le 08-09-2008 à 17:13:47  profilanswer
 

Voilà je cherche a réaliser un batch qui me dit s'il existe des fichiers dont la date de modification (jour mois années heure et minute) est supérieur à celle d'un fichier passé en paramètre, bien sûr la recherche se situe dans un répertoire contenant des sous répertoires.
 
Je commence à faire une première ébauche que je posterai demain
mais si quelques-uns d'entre vous ont deux trois idées... n'hésitez pas

mood
Publicité
Posté le 08-09-2008 à 17:13:47  profilanswer
 

n°1784307
skalimero3​1
Posté le 09-09-2008 à 10:44:50  profilanswer
 

Voilà en gros ce que ça donne....
avec :
%1 le répertoire à analyser
%2 le fichier de référence dont on veux savoir s'il est a jour
%3 le script a appeler pour mettre a jour le fichier de référence.
 
mais j'ai une erreur "Le lecteur spécifié est introuvable" dans la boucle de comparaison de date et je ne vois pas pourquoi
 

Code :
  1. @echo off
  2. set CURRENT_FOLDER=%CD%
  3. cd %1
  4. set REBUILD=0
  5. ::ON VERIFIE SI LE FICHIER DE REFERENCE EXISTE
  6. cd EXPORT
  7. if not exist %2 (
  8. set REBUILD=1
  9. goto build
  10. )
  11. ::RECUPERATION DE LA DATE ET L'HEURE DE LA DERNIERE MODIFICATION DU FICHIER DE REFERENCE
  12. for /f "skip=4 tokens=1,2" %%a in ('dir %2 /tw /-c /a:-d-s-h^|find /v "(s)"') do (
  13. set REFDATE=%%a
  14. set REFTIME=%%b
  15. for /f "tokens=1,2 delims=:" %%i in ('echo %REFTIME%') do (
  16. set REFHOUR=%%i
  17. set REFMIN=%%j
  18. )
  19. for /f "tokens=1,2,3 delims=/" %%i in ('echo %REFDATE%') do (
  20. set REFMODIF=%%k%%j%%i%REFHOUR%%REFMIN%
  21. )
  22. )
  23. ::LISTE DES REPERTOIRES A EXPLOIRER
  24. cd ..
  25. for /f "tokens=*" %%a in ('dir * /b /a:d-s-h') do (
  26. if "%%a" NEQ "export" call :explorefolder %%a
  27. )
  28. if "%REBUILD%" EQU "1" goto build
  29. cd %CURRENT_FOLDER%
  30. goto FIN
  31. :explorefolder
  32. cd %1
  33. ::RECUPERATION DES DATE DE DERNIERE MODIFICATION DE CHAQUE FICHIER CONTENU DANS LE DOSSIER PASSE EN PARAMETRE
  34. for /f "skip=4 tokens=1,2" %%i in ('dir *.* /tw /-c /a:-d-s-h^|find /v "(s)"') do (
  35. set FILEDATE=%%i
  36. set FILETIME=%%j
  37. for /f "tokens=1,2 delims=:" %%o in ('echo %FILETIME%') do (
  38. set FILEHOUR=%%o
  39. set FILEMIN=%%p
  40. )
  41. for /f "tokens=1,2,3 delims=/" %%o in ('echo %FILEDATE%') do (
  42. set FILEMODIF=%%q%%p%%o%FILEHOUR%%FILEMIN%
  43. )
  44. ::TEST SI FICHIER MODIFIE APRES LE FICHIER DE REFERENCE
  45. if %FILEMODIF% GTR %REFMODIF% set REBUILD=1
  46. )
  47. cd ..
  48. goto FIN
  49. :build
  50. cd %CURRENT_FOLDER%
  51. call %3
  52. :FIN

n°1784342
skalimero3​1
Posté le 09-09-2008 à 11:46:31  profilanswer
 

comment cela se fait que mon programme plante quand je double clique dans l'explorateur pour le lancer et qu'il ne plante pas quand il est appelé par l'invite de commande
(bien sur je remplace les %1 %2 et %3.. l'erreur ne viens pas de la et le chemin d'appel est le même

n°1784529
skalimero3​1
Posté le 09-09-2008 à 15:37:35  profilanswer
 

Voilà en cleanant un peu plus...
 

Code :
  1. @echo off
  2. SETLOCAL
  3. set CURRENT_FOLDER=%CD%
  4. set DIRECTORY=%1
  5. set FILENAME=%2
  6. set BUILDBATCH=%3
  7. cd %DIRECTORY%
  8. set REBUILD=0
  9. ::ON VERIFIE SI LE FICHIER DE REFERENCE EXISTE
  10. cd EXPORT
  11. if not exist %FILENAME% (
  12. set REBUILD=1
  13. goto build
  14. )
  15. ::RECUPERATION DE LA DATE ET L'HEURE DE LA DERNIERE MODIFICATION DU FICHIER DE REFERENCE
  16. for /f "skip=4 tokens=1,2" %%a in ('dir %FILENAME%^|find /v "(s)"') do (
  17. for /f "tokens=1,2,3,4,5 delims=/:" %%i in ('echo %%a:%%b') do (
  18. set REFMODIF=%%k%%j%%i%%l%%m
  19. )
  20. )
  21. ::LISTE DES REPERTOIRES A EXPLOIRER
  22. cd ..
  23. for /f "tokens=*" %%a in ('dir * /b /a:d-h /l') do (
  24. if "%%a" NEQ "export" call :explorefolder %%a
  25. )
  26. if %REBUILD% EQU 1 goto build
  27. cd %CURRENT_FOLDER%
  28. goto :FIN
  29. :explorefolder
  30. if %REBUILD% EQU 1 goto :eof
  31. cd %1
  32. ::RECUPERATION DES DATE DE DERNIERE MODIFICATION DE CHAQUE FICHIER CONTENU DANS LE DOSSIER PASSE EN PARAMETRE
  33. for /f "skip=4 tokens=1,2" %%a in ('dir *.* /a:-d-h^|find /v "(s)"') do (
  34. call :getdate %%a %%b
  35. )
  36. cd ..
  37. goto :eof
  38. :getdate
  39. for /f "tokens=1,2,3,4,5 delims=/:" %%i in ('echo %1/%2') do (
  40. if "%%k%%j%%i%%l%%m" GTR "%REFMODIF%" set REBUILD=1
  41. )
  42. goto :eof
  43. :build
  44. cd %CURRENT_FOLDER%
  45. call %BUILDBATCH%
  46. :FIN
  47. ENDLOCAL


Message édité par skalimero31 le 09-09-2008 à 15:52:18
n°1784837
sircam
I Like Trains
Posté le 10-09-2008 à 08:52:02  profilanswer
 

Ola,
 
Dis, tu n'essayerais pas d'utiliser un langage un peu moins barbare pour ce script? Genre Python ou Perl et ce serait goal en 5 lignes lisibles? [:pingouino]
 

Code :
  1. for /f "tokens=1,2,3,4,5 delims=/:" %%i in ('echo %1/%2') do (
  2.   if "%%k%%j%%i%%l%%m" GTR "%REFMODIF%" set REBUILD=1
  3. )


C'est imbuvable du début à la fin :vomi:
 

Citation :

comment cela se fait que mon programme plante


* Précise ce que veut dire "plante".
* Réduit la portée du problème en isolant le morceau de programme qui pose problème, plutôt que de prendre le programme comme une boîte noire.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1785681
skalimero3​1
Posté le 11-09-2008 à 16:24:17  profilanswer
 

Je sais que c'est imbuvable comme langage, je ne suis pas fier de faire du batch, mais dans le cadre du travail et des options qu'on te donne, des fois on n'a pas le choix.
 
Après mon programme plantais car j'avais pas compris que la boucle for était interprété d'une façon très spéciale et donc il faut tout séparé pour que cela marche.
 
Il n'y aurait que moi en effet j'aurais fait du perl.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [batch]fichiers modifiés après une certaine date

 

Sujets relatifs
Batch pour effacer des sous-repertoiresprobleme vb excel inter fichiers
Batch : Save et load de backup (résolu)Batch créer une varible
afficher la date et l'heure[PHP] gzipper les fichiers CSS
Plusieurs batchFichiers texte : taille maximale d'une ligne ?
Mysql supprimer donnes anterieure à une dateCompteur de fichiers uploadé
Plus de sujets relatifs à : [batch]fichiers modifiés après une certaine date


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR