Ajouter extension de plusieurs fichiers en batch

Ajouter extension de plusieurs fichiers en batch - Shell/Batch - Programmation

Marsh Posté le 11-03-2006 à 21:16:09    


Bonjour à tous,
 
Voila je recupère des fichiers sous unix chaque jour par ftp pour des controles quotidiens ou il me faut rajouter l'extension .txt à un certain type de fichiers avant de les envoyer par mail. Au lieu de faire ca à la mano, je voulais donc automatiser cela.
 
Mon souhait serait de créer un batch qui ajoute l'extension *.txt à tous les fichiers  présent dans mon repertoire en local, commencant par com03021_2.etat* ainsi que COMRECAP* puis GABRECAP*
 
Voila ce que j'ai à peu pret reussi a faire, mais mon PROBLEME  pour les fichiers com03021_2.etat* est que mon batch s'arrete apparement au premier fichier trouvé. Il rajoute bien l'extension .txt mais change le nom en com03021_2.etat alors que celui-ci devrait etre conservé.  
 
Je demande donc votre aide à tous. Merci par avance,
 
voici le code de mon batch
 
@echo off
 
cd E:\test controle quotidien\Controle quotidien du 01 03 2006\
 
rename com03021_2.etat* *.txt
rename COMRECAP* *.txt
rename GABRECAP* *.txt
:fin
 
 
 
 
 
 

Reply

Marsh Posté le 11-03-2006 à 21:16:09   

Reply

Marsh Posté le 11-03-2006 à 22:46:44    

Code :
  1. for %%f in (*.*) do (
  2.   ren %%~nxf %%~nxf.txt
  3. )

Reply

Marsh Posté le 12-03-2006 à 15:38:57    

Merci beaucoup nglechau,
 
mais le code que tu me donne rajoute l'extension txt à tous mes fichiers de mon répertoire. Alors que je voudrais simplement que celui ci me rajoute .txt qu'a ce type de fichier présent dans mon repertoire :
fichier commencant par COMRECAP
fichier commencant par GABRECAP
fichier commencant par com03021_2.etat
 
Merci d'avance pour des futurs réponses.

Reply

Marsh Posté le 12-03-2006 à 15:43:56    

Autres précisions, il peu y avoir plusieurs fichiers commencant par COMRECAP GABRECAP et com03021_2.etat dans mon repertoire.
 
Seulement ces 3 types de fichiers doivent recevoir l'extension .txt mais pas les autres .
 
Merci d'avance pour vos réponses.

Reply

Marsh Posté le 12-03-2006 à 18:35:03    

C'est pareil ;)
 

Code :
  1. for %%f in (blabla*.* blibli*.* bloblo*.*) do (
  2.   ren %%~nxf %%~nxf.txt
  3. )


Reply

Marsh Posté le 12-03-2006 à 23:29:29    

Merci beaucoup nglechau pour ton aide, Je viens de tester tout est ok !!!
 
Mais je pense que je vais encore une fois de plus solliciter ton aide. Voila souhaitant automatiser mes contrôles quotidien au maximum. (gain de temps)
Je voulais savoir s’il est possible à partir d’un batch d’envoyer automatiquement un mail à différentes personnes avec mon compte Outlook 2000 configuré par défaut. Et avec en pièce jointes des fichiers présents dans mon répertoire contrôle quotidien ?
 
Si oui, voila ce que je souhaiterais automatiser par un  batch :
 
Je souhaiterais qu’en lançant un second batch ou alors à la suite du précédent (qui était l’ajout de l’extension .txt à un certain type de fichier), que celui-ci :
 
1)  Vérifie que le nombre de fichiers de type toto_CHI.* Et toto_LTE.* Est bien =23 sinon afficher « il manque un fichier » puis continuer la suite au point 2) . Sinon si le nombre est bon donc bien = 23 que celui-ci envoie un mail automatiquement à GASTON en pièce jointes tous les fichiers de type toto_CHI.* Et toto_LTE.* présent dans mon répertoire contrôle quotidien avec pour Objet : Récap CHI.
 
2)  + envoi d’un mail à FLB01 avec en pièces jointes les fichiers COIRECAP* et  GBARECAP* de mon repertoire quotidien, avec pour objet : Récap B00
 
3)   + envoi d’un mail à F003 si fichier pptrre* present dans mon repertoire contrôle quotidien avec en piece jointe tout fichier de type pptrre* et pour objet : fichiers pptrre
 
…
 
Merci d’avance pour ton aide nglechau.

Reply

Marsh Posté le 12-03-2006 à 23:36:01    

Envoi par Outlook je ne sais pas trop vu que je ne l'ai pas, mais tu peux trouver facilement des utilitaires d'envoi de mails en mode ligne de commandes en freeware, blat par exemple.
 
Ensuite, pour le comptage des fichiers et les instructions conditionnelles, c'est pas compliqué. Regarde l'aide des commandes if et for.

Reply

Marsh Posté le 14-03-2006 à 19:38:01    

OK, nglechau.
Merci bien, j’ai trouvé le freeware « blat » et je suis en train d’essayer tout ça pour le mettre dans mon batch.
 
Je voudrais juste encore te poser une question. La voici, qu’elle est le code à ajouter à la suite de mon batch. Pour vérifier que le nombre de fichier de type COMPTERENDU_*  est bien égal =23 et à ce moment retourner le message « Tous les comptes rendus sont présents »
 
Sinon, dans le cas ou ce nombre n’est pas égal à 23. Sachant que mes fichiers sont toujours de ce type : COMPTERENDU_BRT* ou COMPTERENDU_UIO*
 
Pour les fichiers de type COMPTERENDU_BRT*  Tous les jours, je dois en avoir 9 :
Et que la dernière partie de ces 9 fichiers ne change pas, c’est à dire :
 
COMPTERENDU_BRT*  finissant toujours  par 19906
COMPTERENDU_BRT*  finissant toujours  par 19106
COMPTERENDU_BRT*  finissant toujours  par 12906
COMPTERENDU_BRT*  finissant toujours  par 12206
COMPTERENDU_BRT*  finissant toujours  par 16006
COMPTERENDU_BRT*  finissant toujours  par 16606
COMPTERENDU_BRT*  finissant toujours  par 19806
COMPTERENDU_BRT*  finissant toujours  par 14006
COMPTERENDU_BRT*  finissant toujours  par 11406
 
 
Pour les fichiers de type COMPTERENDU_ UIO* Tous les jours, je dois en avoir 14 :
Et que la dernière partie de ces 14 fichiers ne change pas, c’est à dire :
 
COMPTERENDU_ UIO*      finissant toujours  par 16706
COMPTERENDU_ UIO*      finissant toujours  par 12906
COMPTERENDU_ UIO*      finissant toujours  par 12406
COMPTERENDU_ UIO*      finissant toujours  par 16006
COMPTERENDU_ UIO*      finissant toujours  par 19106
COMPTERENDU_ UIO*      finissant toujours  par 17906
COMPTERENDU_ UIO*      finissant toujours  par 13906
COMPTERENDU_ UIO*      finissant toujours  par 12739
COMPTERENDU_ UIO*      finissant toujours  par 12206
COMPTERENDU_ UIO*      finissant toujours  par 16606
COMPTERENDU_ UIO*      finissant toujours  par 11406
COMPTERENDU_ UIO*      finissant toujours  par 14006
COMPTERENDU_ UIO*      finissant toujours  par 19806
COMPTERENDU_ UIO*      finissant toujours  par 18729
 
 
Je voudrais donc que mon batch puisse m’indiquer quels sont (le) ou (les) types de fichiers manquants sous cette forme, par exemple : COMPTERENDU_UIO*  pour la boite 19906 (5 derniers chiffres du fichier non présent).
 
Rappel du début de mon batch :
 
@echo off
 
cd E:\test controle quotidien\
1. for %%f in (blabla*.* blibli*.* bloblo*.*) do (
2.   ren %%~nxf %%~nxf.txt
3. )  
:fin
 
 
Merci encore pour ton aide.

Reply

Marsh Posté le 14-03-2006 à 21:32:33    

Pour vérifier si un fichier existe :
if exist mon_fichier (echo mon_fichier exist) else (mon_fichier introuvable)
 
Je te laisse le soin de combiner avec la boucle for.
 
for /?
pour plus d'info et les exemples dans l'aide fournie.
 
Pour compter le nombre de fichiers, il faut que tu fasses un listing de ceux-ci et inities un compteur. A chaque fois que tu en trouves un, tu incrémentes le compteur.

Reply

Marsh Posté le 14-03-2006 à 22:06:01    

Merci, mais j'ai beau regarder l'aide, je n'y comrpend pas grand choses :-(
 
Pourrais tu me donner un exemple concret avec ca stp :
 
if exist COMPTERENDU_BRT.(14chiffres).19906 (echo COMPTERENDU_BRT 19906 existe) else (echo COMPTERENDU_BRT 19906 inexistant)  
if exist COMPTERENDU_BRT.(14chiffres).19106 else (echo COMPTERENDU_BRT 19106 existe) else (echo COMPTERENDU_BRT 19106 inexistant)
if exist COMPTERENDU_BRT.(14chiffres).12906 else ...  
if exist COMPTERENDU_BRT.(14chiffres).12206 else ...
if exist COMPTERENDU_BRT.(14chiffres).16006 else
if exist COMPTERENDU_BRT.(14chiffres).16606 else
if exist COMPTERENDU_BRT.(14chiffres).19806 else
if exist COMPTERENDU_BRT.(14chiffres).14006 else  
if exist COMPTERENDU_BRT.(14chiffres).11406 else  
 
idem pour COMPTERENDU_ UIO*
 
Merci

Reply

Marsh Posté le 14-03-2006 à 22:06:01   

Reply

Marsh Posté le 15-03-2006 à 15:03:15    

Est-ce que le nombre de 14 chiffres est important ? Ou juste
blabla*1234
qui compte ?

Reply

Marsh Posté le 15-03-2006 à 20:08:40    

Bonsoir nglechau,
 
Non le nombre de 14 chiffres n'est pas important. Ce qui a vraiment de l'importance, c'est le debut c'est à dire COMPTERENDU_BRT. et la fin exemple 19906. Donc comme tu dis blabla*1234.
 
Merci beaucoup pour ton aide.

Reply

Marsh Posté le 16-03-2006 à 00:39:04    

Dans ce cas, est-ce que cette méthode te convient ?

Code :
  1. @echo off
  2. for %%a in (1234 5678 9012) do (
  3.   call :process "blabla*%%a"
  4. )
  5. goto end
  6. :process
  7. if exist %1 (
  8.   echo %~1 existe
  9. ) else (
  10.   echo %~1 n'existe pas
  11. )
  12. :end
  13. goto :eof


Reply

Marsh Posté le 16-03-2006 à 08:04:47    

OK merci encore nglechau.
 
Je vais essayer tout ca :-)
 

Reply

Marsh Posté le 16-03-2006 à 19:16:02    

Bonsoir nglechau,
 
Je dois decidement ne pas être très doué :-(
 
Je viens de tester et apparement mon batch ne fonctionne pas. Bien que mes fichiers COMPTERENDU_BRT*
et COMPTERENDU_UIO* existent dans mon répertoire. Je l'ai lancé en mettant pause à la fin de mon batch et celui-ci
m'indique que tous mes fichiers n'existent pas.
 
Merci pour ton aide.
 
Voici mon batch en globalité :
 
@echo off
 
cd C:\Test quotidien\
 
for %%f in (blabla*.* blibli*.* bloblo*.*) do (
ren %%~nxf %%~nxf.txt
)
 
for %%a in (19906 19106 12906 12206 16006 11406 16606 14006 19806) do (
call :process "COMPTERENDU_BRT*%%a"
)
goto end  
:process
if exist %1 (
echo %~1 existe
) else (
echo %~1 n'existe pas
)
:end
goto BALTEL
:BALTEL
for %%b in (16706 12906 12406 16006 19106 17906 13906 12739 12206 16606 11406 14006 19806 18729) do (
call :process2 "COMPTERENDU_UIO*%%a"
)
goto end2  
:process2
if exist %1 (
echo %~1 existe
) else (
echo %~1 n'existe pas
)
:end2
goto fin
:fin

Reply

Marsh Posté le 16-03-2006 à 21:17:32    

Tu gardes toujours les blabla au début ?
 
A part ça, tu ne sais pas utiliser la commande
cd
Il faut quoter les chemins contenant des espaces.
 
Enfin, pourquoi dupliquer la procédure process pour faire la même chose (code identique) ? Une seule suffit :

Code :
  1. for %%a in (...) do (call :process ...)
  2. for %%a in (...) do (call :process ...)
  3. goto end
  4. :process
  5. ...blabla...
  6. :end


 

Reply

Marsh Posté le 16-03-2006 à 22:36:20    

Non je ne garde pas les blabla sur mes vrai controles, rassure toi. C'est juste que je fais quelques tests. Donc peu importe le nom.
 
Pour la commande cd est-tu sur que les chemins contenants des espaces doivent etre absolument quoter ? parceque en faisant un test sans quotes, le debut de mon batch  marche tres bien :-) (testé sous windows 2000 et xp)
 
Merci encore pour cette explication et ton temps accordé, a un newbie en developpement.
Je vai faire un max de tests de mon côté, avant de revenir d'embeter.  
 
Une fois tout ca ok, il me manquera plus que l'automatisation d'envois de mail automatique couplé avec blat.

Reply

Marsh Posté le 16-03-2006 à 23:26:06    

nikozozo a écrit :

Pour la commande cd est-tu sur que les chemins contenants des espaces doivent etre absolument quoter ? parceque en faisant un test sans quotes, le debut de mon batch  marche tres bien :-) (testé sous windows 2000 et xp)


Fais un
dir
puis une
pause
pour vérifier le contenu de ton répertoire.
 
Il me semble qu'il y ait une variable d'environnement qui décide ce comportement, mais impossible de me rappeler laquelle. Par conséquent, si tu ne définies pas cette variable dans ton batch, ça ne risque pas de fonctionner dans n'importe quel environnement, en fonction de la config actuelle du shell (*)
 
A noter également le cas où le batch est lancé de puis une autre partition que celle hébergeant le répertoire à traiter
cd
tout seul ne fera aucun effet. Il va falloir changer de partition, par  
cd /d
par exemple.
 
(*)Edit : j'ai trouvé, c'est bien de  
enableExtensions
qu'il s'agissait.
http://www.mezimages.com/image/nglechau/hfr/06031623280.jpg


Message édité par wackevat le 16-03-2006 à 23:30:34
Reply

Marsh Posté le 17-03-2006 à 20:10:18    

Bonsoir nglechau,
 
Merci pour cette explication sur la commande dir. Je comprends maintenant l’importance des quottes.
 
Par contre j’ai vraiment du mal avec mon batch, (synthaxe …) surtout la vérif des fichiers COMPTERENDU_BRT* et COMPTERENDU_UIO* (Même en enlevant un fichier par exemple COMPTERENDU_UIO*se finissant par 17906 de mon répertoire, mon batch ne me prévient pas qu’il manque un des fichiers)
 
Pourrais tu me dire ce qui cloche (et éventuellement me donner mon code ci-dessous corrigé) ?  
 
Voici mon code.  
-----------------------------------------------------------
@echo off  
 
cd C:\TestControleQuotidien\  
 
for %%f in (etat*.* etat2*.* etat3*.*) do (  
ren %%~nxf %%~nxf.txt  
)  
 
for %%a in (19906 19106 12906 12206 16006 11406 16606 14006 19806) do (  
call :process "COMPTERENDU_BRT*%%a"  
)  
for %%a in (16706 12906 12406 16006 19106 17906 13906 12739 12206 16606 11406 14006 19806 18729) do (  
call :process "COMPTERENDU_UIO*%%a”
)
goto fin    
:process  
if exist %1 (  
echo %~1 existe  
) else (  
echo %~1 n'existe pas  
)  
:fin
----------------------------------------------------------
 
Merci encore pour tes lumières.

Reply

Marsh Posté le 17-03-2006 à 22:46:30    

Ton code est parfait, enfin presque :D
 
Perso j'utiliserais l'option /d pour
cd
pour les raisons que j'avais mentionnées hier.
 
Pour ton souci :
- est-ce que le renommage fonctionne ?
- les fichiers etat*.* se trouvent dans le même répertoire que les fichiers COMPTERENDU*.* ?
- est-ce que le batch trouve bien les fichiers existants ?
- combien de fichiers COMPTERENDU*.* y a-t-il au total dans ce répertoire ?
- si tu ajoutais un
dir
pause
juste après la commande
cd
qu'est-ce que tu vois ?
 
Sinon, sur ce forum, tu as les balises code et /code (entourées de [ et ]) pour poster les lignes de code "joliment" ;)
 
Edit : tu copies/colles ton code ici ou tu le retapes ? Parce que à la fin de la ligne concernant COMPTERENDU_UIO, le guillemet ne ressemble pas à ses copains :D


Message édité par wackevat le 17-03-2006 à 22:50:21
Reply

Marsh Posté le 17-03-2006 à 23:57:17    

- ok pour l'option /d pour cd je viens de la rajouter.
 
- Pour ce qui est du renommage ca c'est nickel , sa marche Nickel Chrome.
 
- Oui les fichiers etat*.* se trouvent dans le même répertoire que les fichiers COMPTERENDU*.*
 
- est-ce que le batch trouve bien les fichiers existants ?  
OUi apparement puisque comme tu ma dis, j'ai coller un "dir"et "pause" après la commande "cd" et celui ci m'affiche bien dans ma fenetre ms-dos toute la liste de mes fichiers du repertoire.
 
- combien de fichiers COMPTERENDU*.* y a-t-il au total dans ce répertoire ? 23
 
- si tu ajoutais un "dir" "pause" juste après la commande cd
qu'est-ce que tu vois ?  
Je vois bien le listing de tous mes fichiers du rep TestControleQuotidien puis appuyer sur une touche pour continuer ...
 
et lorsque j'appui sur une touche ma fenetre dos se ferme, alors que je viens de faire un test en retirant exprès un fichier COMPTERENDU_UIO  19106
Celui-ci devrait donc m'avertir par une ligne, popup ou fenetre, qu'un fichier est manquant COMPTERENDU_UIO  19106 ,mais il n'en est rien :-(
 
Pour les balises ok je ne savais pas. c'est vrai que cela fesai un peu guignol pour du code serieux qu'est le batch :-)
 
- Pour le guillement bizzaroide, cela doit etre la cause d'un multiple copier coller dans word au boulot :-)
(Because Je jongle à faire des tests à la maison et au boulot)
 
Merci de m'aider, je sens qu'on est plus tres loin du but !!!
 
Merci.
 
 

Reply

Marsh Posté le 18-03-2006 à 00:31:08    

Ah ok, il te manquait une
pause
avant de sortir du script. Il n'y a pas de notion "popup ou fenêtre" par batch. Pour chaque type de fichier, le script affiche une ligne de résultat de la vérif.
 
Enfin, je te conseille de prendre un tuto, parce que jusque là, tu bidouilles du code donné sans comprendre ce que ça représente. PowerBatch en inclut un assez sympa pour débuter.

Reply

Marsh Posté le 18-03-2006 à 10:22:16    

ok super merci pour la pause à la fin. tout fonctionne !!!.
OK pour la ligne de resultat ==> qui est le seul affichage possible en batch)  (je t'ai surtout dit ca puisque en utilisant la commande netsend, celle-ci affiche une boite de dialogue sur le poste distant, donc je pensais qu'il etait peut etre possible de reproduire ca en batch).
 
Par contre mon script me previent meme quand mes fichiers sont present, le mieux serait simplement dans ce cas de ne rien afficher et de juste afficher un message pour celui qui manque (pour ne pas appuyer 23 fois sur une touche pour continuer)  
Voila ce qu'il m'affiche :
COMPTERENDU_BRT*16606 existe
Appuyez sur une touche pour continuer...
...  idem pour les COMPTERENDU_UIO*
 
La on commence à etre tres proche du but, enfin j'espère :-)  
 
Voila ce que j'ai essaye de modifier
 
[code
goto fin    
:process  
if not exist %1 (  
echo %~1 n'existe pas  
)    
:fin
pause
 
/code]
 
Mais celui-ci me demande encore d'appuyer sur une touche (il me demande d'appuyer sur une touche 23 fois, ce qui est egal aux nombres total de fichiers à verifier bien sur)
 
merci encore.
 
 
 

Reply

Marsh Posté le 18-03-2006 à 10:27:05    

Ah zut !!! Pour les balises il semblerait que j'ai encore merdé !!!
 
Il est vrai que je bidouille un peu.Ca c'est sur ! pour powerbatch ok je vais tester, surement le prendre pour de futurs batchs.

Reply

Marsh Posté le 18-03-2006 à 11:06:02    

nikozozo a écrit :

en utilisant la commande netsend, celle-ci affiche une boite de dialogue sur le poste distant, donc je pensais qu'il etait peut etre possible de reproduire ca en batch).


net send est un programme Windows (si si !) et ne fait pas partie du batch, ni utilise ce langage.

nikozozo a écrit :

pour powerbatch ok je vais tester, surement le prendre pour de futurs batchs.


Non, je te laisse l'étudier maintenant pour perfectionner le script actuel. Une fois que tu as compris à quoi ça sert chaque ligne dedans, tu vas pouvoir corriger tout seul.

nikozozo a écrit :

ok super merci pour la pause à la fin


L'ordre des lignes dans le script n'est pas l'ordre d'exécution des commandes.

Reply

Marsh Posté le 18-03-2006 à 11:15:10    

OK en tout cas merci pour tout.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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