Ajouter extension de plusieurs fichiers en batch - Shell/Batch - Programmation
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.
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.
Marsh Posté le 12-03-2006 à 18:35:03
C'est pareil
Code :
|
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 sil est possible à partir dun batch denvoyer 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 quen lançant un second batch ou alors à la suite du précédent (qui était lajout de lextension .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 dun mail à FLB01 avec en pièces jointes les fichiers COIRECAP* et GBARECAP* de mon repertoire quotidien, avec pour objet : Récap B00
3) + envoi dun 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 davance pour ton aide nglechau.
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.
Marsh Posté le 14-03-2006 à 19:38:01
OK, nglechau.
Merci bien, jai trouvé le freeware « blat » et je suis en train dessayer tout ça pour le mettre dans mon batch.
Je voudrais juste encore te poser une question. La voici, quelle 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 nest 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, cest à 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, cest à 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 mindiquer 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.
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.
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
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 ?
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.
Marsh Posté le 16-03-2006 à 00:39:04
Dans ce cas, est-ce que cette méthode te convient ?
Code :
|
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 rocess "COMPTERENDU_BRT*%%a"
)
goto end
rocess
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 rocess2 "COMPTERENDU_UIO*%%a"
)
goto end2
rocess2
if exist %1 (
echo %~1 existe
) else (
echo %~1 n'existe pas
)
:end2
goto fin
:fin
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 :
|
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.
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.
Marsh Posté le 17-03-2006 à 20:10:18
Bonsoir nglechau,
Merci pour cette explication sur la commande dir. Je comprends maintenant limportance des quottes.
Par contre jai 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 quil 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 rocess "COMPTERENDU_BRT*%%a"
)
for %%a in (16706 12906 12406 16006 19106 17906 13906 12739 12206 16606 11406 14006 19806 18729) do (
call rocess "COMPTERENDU_UIO*%%a
)
goto fin
rocess
if exist %1 (
echo %~1 existe
) else (
echo %~1 n'existe pas
)
:fin
----------------------------------------------------------
Merci encore pour tes lumières.
Marsh Posté le 17-03-2006 à 22:46:30
Ton code est parfait, enfin presque
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
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.
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.
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
rocess
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.
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.
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.
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