[BATCH] Selection du fichier le plus recent

Selection du fichier le plus recent [BATCH] - Shell/Batch - Programmation

Marsh Posté le 05-12-2007 à 16:15:45    

Salut les gens !
 
Voici mon problème :
 
Je dispose d'une grosse quantité de fichier PDF a traiter tout les mois (+ de 3000)
 
Je dispose deja d'un batch créé par mes soins qui fonctionne tres bien.  
SAUF que parmi ceux ci, certains sont en double (voir en triple...) et libéllés de cette maniere :
 
FR0007050190_13062007_1_PROSPECTUS.pdf
FR0007050190_17072007_1_PROSPECTUS.pdf
 
Il contiennent donc une date dans le nom du fichier.
 
De base, le batch copie les fichiers dont j'ai besoin dans un dossier tampon (tri par liste). Mais pour ceux ci, le nom etant different, il me les copient en double.
 
Connaitriez-vous une methode pour permettre la copie de ces doublons en fonction de la date contenus dans le nom du fichier (copie uniquement du plus recent)  ?
 
Merci d'avance pour vos reponses...


---------------
NULL
Reply

Marsh Posté le 05-12-2007 à 16:15:45   

Reply

Marsh Posté le 05-12-2007 à 16:41:29    

http://membres.lycos.fr/lunnatick/ [...] E9cent.bat

 
Code :
  1. for /f "tokens=4* delims= " %%i in ('dir /o:d "C:\monRep\*.txt" ^| findstr /i /c:".txt"') do set VrFchRcnt=%%i %%j
  2. echo %VrFchRcnt%


Message édité par Coolnut le 05-12-2007 à 16:43:01
Reply

Marsh Posté le 05-12-2007 à 16:45:58    

Merci,
 
Je vais essayer ca de suite et voir comment l'intégré a mon batch !
 
:jap:


---------------
NULL
Reply

Marsh Posté le 05-12-2007 à 16:46:51    

montre nous le résultat ;)

Reply

Marsh Posté le 06-12-2007 à 09:48:46    

Hop, de retour !
 
Dsl, je n'ai pas montré le résultat plus tôt, j'étais parti... :D
 
Bon, la fonction marche du feu de D.... mais y'a un bémol.
 
Voici le code (temporaire, a des fins de tests) dans lequel elle est intégrée :
 

Code :
  1. :doublon
  2. SET listeyaka=FR0007050190, FR0007060850, FR0010321810
  3. FOR %%a IN (%listeyaka%) DO IF EXIST "%prospectus%\*%%a*.pdf" (
  4. for /f "tokens=4* delims= " %%i in ('dir /o:d "%prospectus%\*%%a*.pdf" ^| findstr /i /c:".pdf"') do set VrFchRcnt=%%i%%j)
  5. XCOPY "%prospectus%\%VrFchRcnt%" "%prospectus%\test" /D /Y
  6. echo %VrFchRcnt%
  7. echo %a%
  8. del "%prospectus%\*%a*.pdf"
  9. pause
  10. echo %VrFchRcnt%
  11. IF EXIST "%prospectus%\*.pdf" (
  12. GOTO doublon
  13. )


 
Comme la fonction ne détecte que le dernier doublon présent dans la quantité de fichier, je suis obligé de faire une boucle, pour qu'elle les traitent tous.
L'inconvénient, c'est que la valeur de "%%a" est perdu après l'exécution  de la recherche de doublon. ce qui fait que je ne peux pas éliminé les fichiers portant le même numéro avant l'exécution de la boucle.
 
Je précise quand même que je ne suis pas un pro du batch. j'utilise des fonctions relativement simple a des fins de tri.
La preuve : la fonction marche du tonnerre, j'ai essayé de la prendre en défaut (:D) mais je ne comprends pas plus que ça comment elle fonctionne  [:anathema]  
 
En tout cas, merci pour tout, et si quelqu'un avait une idée pour mon pb...  [:zytra]


---------------
NULL
Reply

Marsh Posté le 06-12-2007 à 10:00:08    

La variable %%a ne peut être utilieser selement dans un boucle for

Reply

Marsh Posté le 06-12-2007 à 10:26:12    

J'ai encore pas mal de truc a apprendre...
 
Effectivement, je viens de me rendre compte que dans mon batch, %%a n'est utilisé que dans les boucle FOR
J'hallucine !
J'ai reussi a développer un batch de 68Ko sans tombé une seule fois sur le cas... [:rofl]  
 
Derniere question : Pourrais tu me donner des infos sur le séparateur "^|" que tu as utilisé dans les parentheses ?
Que signifie-t-il ? y-a-t'il des variantes ?
 
Merci d'avance :jap:


---------------
NULL
Reply

Marsh Posté le 06-12-2007 à 10:32:31    

le séparateu | c'est pour coupler deux commande, par exemple:

Code :
  1. type fichier.txt | find "jul"


Dans une boucle for on doit rajouter ^ devant

Reply

Marsh Posté le 06-12-2007 à 11:50:13    

Coolnut a écrit :

le séparateu | c'est pour coupler deux commande, par exemple:

Code :
  1. type fichier.txt | find "jul"


Dans une boucle for on doit rajouter ^ devant


 
Merci !!!
 
Ca y est, ca fonctionne.
 
Voici le code final :

Code :
  1. :doublon
  2. SET listeyaka=FR0007050190, FR0007060850, FR0010321810
  3. FOR %%a IN (%listeyaka%) DO IF EXIST "%prospectus%\*%%a*.pdf" (
  4. for /f "tokens=4* delims= " %%i in ('dir /o:d "%prospectus%\*%%a*.pdf" ^| findstr /i /c:".pdf"') do set VrFchRcnt=%%i%%j& set suppr=%%a)
  5. XCOPY "%prospectus%\%VrFchRcnt%" "%prospectus%\test\" /D /Y
  6. del "%prospectus%\*%suppr%*.pdf"
  7. IF EXIST "%prospectus%\*.pdf" (
  8. GOTO doublon
  9. )


 
Encore merci pour ton aide, coolnut  :jap:  :jap:  :jap:


---------------
NULL
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed