.bat met des infos dans un .txt à l'aide!!!!
jo13.56
-
Tete555 Messages postés 33 Statut Membre -
Tete555 Messages postés 33 Statut Membre -
boujour a tous, j'ai créé un .bat qui me donne l'heure et la date.
Je voudrais qu'il s'execute quand je vais dans le menu demarrer ou, si possible, à chaque fois que je lance un programme et aussi qu'il me donne le nom du programme.
Etant novice en programmation, je suis entrain de devenir fou, lol. Je compte l'utilisé pour faire de la surveillance car je ne suis pas chez moi la semaine et souvent quand je rentres, mon pc est en panne...
Comment faire?
Merci de votre aide qui me sera surement très utile.
mon .bat: echo %date% %time% >> C:surveillance.txt
jo13.56
Je voudrais qu'il s'execute quand je vais dans le menu demarrer ou, si possible, à chaque fois que je lance un programme et aussi qu'il me donne le nom du programme.
Etant novice en programmation, je suis entrain de devenir fou, lol. Je compte l'utilisé pour faire de la surveillance car je ne suis pas chez moi la semaine et souvent quand je rentres, mon pc est en panne...
Comment faire?
Merci de votre aide qui me sera surement très utile.
mon .bat: echo %date% %time% >> C:surveillance.txt
jo13.56
A voir également:
- .bat met des infos dans un .txt à l'aide!!!!
- Creer un fichier .bat - Guide
- Bat to exe - Télécharger - Édition & Programmation
- Qui est l auteur du fichier txt ✓ - Forum Windows
- Trouver erreur de syntaxe fichier txt - Forum Windows
- Txt to bat ✓ - Forum Autoit / batch
14 réponses
Bonjour, il faut ajouter un \ après C:
Voici la bonne commande :
echo %date% %time% >> C:\surveillance.txt
Voici la bonne commande :
echo %date% %time% >> C:\surveillance.txt
Ce qui ne répond absolument pas à la question, qui était surtout de pouvoir exécuter ce bat à chaque exécution de programme !
A mon avis, cette manip' n'est pas possible, à moins de développer carrément une interface utilisateur par laquelle les utilisateurs devraient passer pour ouvrir les programmes... Mais c'est d'un coup beaucoup plus lourd...
Pour résoudre ton problème, essaie plutôt de te renseigner sur les fonctionnalités du journal d'évènements de windows... Je ne peux pas trop t'aider sur ce point, mais je pense que s'il est bien configuré, il doit pouvoir t'aider.
A mon avis, cette manip' n'est pas possible, à moins de développer carrément une interface utilisateur par laquelle les utilisateurs devraient passer pour ouvrir les programmes... Mais c'est d'un coup beaucoup plus lourd...
Pour résoudre ton problème, essaie plutôt de te renseigner sur les fonctionnalités du journal d'évènements de windows... Je ne peux pas trop t'aider sur ce point, mais je pense que s'il est bien configuré, il doit pouvoir t'aider.
Je pense comme Revax.
Ce n'est pas possible avec un simple .bat.
par contre, sous XP, tu as la commande qprocess (avec divers options)
En espérant que le programme ne soit pas trop court, tu peux faire un .bat qui boucle toute les x minutes et qui fait :
echo %date% %time%>>surveillance
qprocess>>surveilance
FIN DE LA BOUCLE.
Si tu t'en sens le courage, tu peux aussi récupérer le qprocess, et le comparer au précédent, et ne sauvegarder les qonnées que si elles ont changer, ce qui permet de ne pas exploser la taille du fichier de log.
Autre chose pour surveiller : netstat ! Il affiche les connections réseau, et les processus associé, son intéret, c'est qu'il a une "rémanence" et que même une foi une connection fermer elle reste visible quelque temps.
Voilà ce que je peux te proposer. Je serai incapable de le réalisé en bat pur, mais avec un mélange de C et de bat, j'y arriverai sans problème.
Bonne chance
Ce n'est pas possible avec un simple .bat.
par contre, sous XP, tu as la commande qprocess (avec divers options)
En espérant que le programme ne soit pas trop court, tu peux faire un .bat qui boucle toute les x minutes et qui fait :
echo %date% %time%>>surveillance
qprocess>>surveilance
FIN DE LA BOUCLE.
Si tu t'en sens le courage, tu peux aussi récupérer le qprocess, et le comparer au précédent, et ne sauvegarder les qonnées que si elles ont changer, ce qui permet de ne pas exploser la taille du fichier de log.
Autre chose pour surveiller : netstat ! Il affiche les connections réseau, et les processus associé, son intéret, c'est qu'il a une "rémanence" et que même une foi une connection fermer elle reste visible quelque temps.
Voilà ce que je peux te proposer. Je serai incapable de le réalisé en bat pur, mais avec un mélange de C et de bat, j'y arriverai sans problème.
Bonne chance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
merci a vous tous, je vais essayé d'utiliser la methode de "char sniper" mais étant novice, je ne pense pas y arriver.
Si tu pouvais m'expliquer le q process un peu plus en détail et comment comparer se serait sympa.
Il faut que je marque "fin de boucle" dans le .bat?
Si tu pouvais m'expliquer le q process un peu plus en détail et comment comparer se serait sympa.
Il faut que je marque "fin de boucle" dans le .bat?
Salut.
non, le fin de boucle, c'est pour signifier mon ignorance de la façon dont fonctionne la boucle du .bat
mais il me semble que tu peux le faire avec un goto.
comparer en bat, je ne suis pas certain que cela soit possible, et en tout cas, c'est difficile.
le truc qui demande le moins d'énergie, c'est de le faire en C++.
je ne vais pas t'écrire toute les fonctions, mais c'est relativement simple.
L'algo détailler :
écrire le nombre de processus dedans grâce à la commande : system("qprocess>>surveillance.txt");
ouvrir le fichier, et récupérer les donnée dans un variable string tmp1
début de la boucle infinie (while(1))
récupération de qprocess dans une variable temporaire:
system("qprocess>tmp.txt");
ouvrir tmp.txt, récupérer ce qu'il y a dedans dans une variable string tmp2.
Comparer tmp1 et tmp2 (fonction assez complexe à faire)
écrire la différence avec la date et l'heure dans le fichier surveillance.txt
mettre tmp2 dans tmp1 pour la boucle d'après : tmp2=tmp1
vider les memoires tampon : fflush()
attendre un certain temps avant de recommancé : _sleep(90000) (en ms)
fin de la boucle
Il ne faut pas avoir peur de faire du C++, si tu es capable de faire du bat, un tel programme ne présente pas plus de difficultés. Je dirai même qu'il est plus simple.
L'intéret supplémentaire, c'est que compiler avec l'option -mwindow, il est invisible dans la barre des taches, alors que le .bat l'est toujours.
non, le fin de boucle, c'est pour signifier mon ignorance de la façon dont fonctionne la boucle du .bat
mais il me semble que tu peux le faire avec un goto.
comparer en bat, je ne suis pas certain que cela soit possible, et en tout cas, c'est difficile.
le truc qui demande le moins d'énergie, c'est de le faire en C++.
je ne vais pas t'écrire toute les fonctions, mais c'est relativement simple.
L'algo détailler :
écrire le nombre de processus dedans grâce à la commande : system("qprocess>>surveillance.txt");
ouvrir le fichier, et récupérer les donnée dans un variable string tmp1
début de la boucle infinie (while(1))
récupération de qprocess dans une variable temporaire:
system("qprocess>tmp.txt");
ouvrir tmp.txt, récupérer ce qu'il y a dedans dans une variable string tmp2.
Comparer tmp1 et tmp2 (fonction assez complexe à faire)
écrire la différence avec la date et l'heure dans le fichier surveillance.txt
mettre tmp2 dans tmp1 pour la boucle d'après : tmp2=tmp1
vider les memoires tampon : fflush()
attendre un certain temps avant de recommancé : _sleep(90000) (en ms)
fin de la boucle
Il ne faut pas avoir peur de faire du C++, si tu es capable de faire du bat, un tel programme ne présente pas plus de difficultés. Je dirai même qu'il est plus simple.
L'intéret supplémentaire, c'est que compiler avec l'option -mwindow, il est invisible dans la barre des taches, alors que le .bat l'est toujours.
ok mais je débute à peine dans le .bat et j'ai jamais fais de c++
Si tu ne peux plus m'aidé, peux tu me donner des liens ou autre chose pour apprendre à utiliser le c++?
Si tu ne peux plus m'aidé, peux tu me donner des liens ou autre chose pour apprendre à utiliser le c++?
RE, j'ai trouvé sa sur une autre discution, sa peut servir?
/* j'ouvre mon fichier */
FILE *fp = fopen(monfichier, "w");
assert (fp != NULL);
/* j'ecris ds mon fichier */
fprintf (fp, "voici mon beau texte");
/* je ferme mon fichier, ne jamais oublier de fermer son fichier
* avant la fin du programme
*/
fclose (fp);
cas2
ofstream f (mon fichier);
if (f.isopen () ) {
for (int i = 0; i < 4; i++)
f << "voici mon texte ds le fichier "<<i<<endl;
f.close ();
}
Merci de m'aidé, j'apprécis
/* j'ouvre mon fichier */
FILE *fp = fopen(monfichier, "w");
assert (fp != NULL);
/* j'ecris ds mon fichier */
fprintf (fp, "voici mon beau texte");
/* je ferme mon fichier, ne jamais oublier de fermer son fichier
* avant la fin du programme
*/
fclose (fp);
cas2
ofstream f (mon fichier);
if (f.isopen () ) {
for (int i = 0; i < 4; i++)
f << "voici mon texte ds le fichier "<<i<<endl;
f.close ();
}
Merci de m'aidé, j'apprécis
Salut.
Voilà ce que j'ai écrit
Le but de cette fonction est de vérifier si tout les processus son encore présent ou non, ou si il y en a de nouveau.
tu peu ajuster le temps dans la fonction sleep. Je l'ai mi à 90s, mais si diff fonctionne, tu peux peur être le raccourcir.
Une autre version du code, serait d'écrire la différence de processus, mais c'est plus compliquer, et pas forcement plus lisible.
Voilà ce que j'ai écrit
#include <string>
#include <vector>
#include <stdio.h>
#include <fstream>
#include <ctime>
std::fstream sauv,tmp;
std::vector<std::string> s_sauv,s_tmp;
void ecrit(std::fstream&,std::vector<std::string>);
bool diff(std::vector<std::string>&,std::vector<std::string>&);
time_t *tttt;
int main()
{
tttt=new time_t;time(tttt);
system("qprocess >tmp.txt");
tmp.open("tmp.txt",std::ios::in);
int i=0;
while (tmp) {s_sauv.push_back("");getline(tmp,s_sauv[i]);i++;}
tmp.close();tmp.clear();
sauv.open("surveillance.txt",std::ios::out);
ecrit(sauv,s_sauv);
while(1)
{
system("qprocess >tmp.txt");
tmp.open("tmp.txt",std::ios::in);
i=0;
while (tmp) {s_tmp.push_back("");getline(tmp,s_tmp[i]);printf("%s\n",s_tmp[i].c_str());i++;}
tmp.close();tmp.clear();
if(diff(s_tmp,s_sauv)){s_sauv=s_tmp;ecrit(sauv,s_sauv);}
s_tmp.clear();
_flushall();
_sleep(90000);
}
return 0;
}
//***** **** **** ** *** ** *** ** *** ** * ** *** **** *****-----------
void ecrit(std::fstream& f,std::vector<std::string> vs)
{
time(tttt);
f<<ctime(tttt)<<std::endl;
for(int i=0;i<vs.size();i++)
f<<vs[i]<<std::endl;
return;
}
bool diff(std::vector<std::string>& a,std::vector<std::string>& b)
{
if(a.size()!=b.size()) return true;
bool resu=false;
for (int i=0;i<a.size();i++)
{
resu=true;
if(a[i].find("qprocess")==std::string::npos)// je ne m'intéresse pas au processus qprocess qui est récurant et change à chaque appel
continue;
for(int j=0;j<b.size();j++)
if(a[i]==b[j]) {resu=false;break;}
if(!resu)continue;
return true;
}
return true;
}
Mais pour l'instant, il reste des problèmes avec la fonction diff.
Le but de cette fonction est de vérifier si tout les processus son encore présent ou non, ou si il y en a de nouveau.
tu peu ajuster le temps dans la fonction sleep. Je l'ai mi à 90s, mais si diff fonctionne, tu peux peur être le raccourcir.
Une autre version du code, serait d'écrire la différence de processus, mais c'est plus compliquer, et pas forcement plus lisible.
re moi
Ce programme te donne un outil de surveillance de base, mais qui pourra peut être t'aider à résoudre ton problème.
bool diff(std::vector<std::string>& a,std::vector<std::string>& b)
{
if(a.size()!=b.size()) return true;
bool resu=false;
for (int i=0;i<a.size();i++)
{
if(a[i].find("qprocess")==std::string::npos)// je ne m'intéresse pas au processus qprocess qui est récurant et change à chaque appel
continue;
if(a[i].find("cmd.exe")==std::string::npos)// je ne m'intéresse pas au processus cmd qui est récurant et change à chaque appel
continue;
if(a[i]!=b[i]) {return true;}
}
return false;
}
Cette version de diff fonctionne, mais est plus basique, elle suppose que l'ordre des processus ne bouge pas (en théorie, ils sont rangé suivant un certain ordre et ne bougent pas) De plus j'ai remarquer qu'à chaque foi il y a un nouveau processus cmd.exe qui apparait, j'ai donc retirer le test dessus aussi.
Ce programme te donne un outil de surveillance de base, mais qui pourra peut être t'aider à résoudre ton problème.
Salut.
le tps? le temps c'est ça? tu veux dire que tu ne sais pas où tu doit mettre le temps d'attente entre chaque mise à jour?
Si c'est ça, c'est dans sleep() cette fonction, comme sont nom l'indique inactive le programme pendant un certain temps avant de le continuer.
aparament, tu ne connait rien au C/C++...
En fait, c'est un langage compiler. Il faut donc un programme pour transformer ce que tu as écrit en un fichier éxecutable.
à mon avis, le mieux est de prendre gcc, il est dispo pour toutes les machines et environnement, et est largement documenter.
Tu copie le code que je t'ai donnée dans un fichier texte que tu nome avec l'extension 'cpp'.
Puis tu compile :
gcc prog.cpp -o prog.exe -mwindow
et ensuite, tu n'a plus qu'a mettre le programme ou un raccourci dans le menu demarage, et il sera lancer.
Il est vrai que ce programme n'est pas évident à comprendre, car j'utilise beaucoup de chose avec des noms peu éloquant. Mais il n'est pas si compliquer que ça. Tu devrai au moins en saisir le sens général.
Si tu rencontre des problèmes en C, n'ésite pas à créer un nouveau message, tu aura alors des réponse d'autres personnes plus pédagogue que moi
le tps? le temps c'est ça? tu veux dire que tu ne sais pas où tu doit mettre le temps d'attente entre chaque mise à jour?
Si c'est ça, c'est dans sleep() cette fonction, comme sont nom l'indique inactive le programme pendant un certain temps avant de le continuer.
aparament, tu ne connait rien au C/C++...
En fait, c'est un langage compiler. Il faut donc un programme pour transformer ce que tu as écrit en un fichier éxecutable.
à mon avis, le mieux est de prendre gcc, il est dispo pour toutes les machines et environnement, et est largement documenter.
Tu copie le code que je t'ai donnée dans un fichier texte que tu nome avec l'extension 'cpp'.
Puis tu compile :
gcc prog.cpp -o prog.exe -mwindow
et ensuite, tu n'a plus qu'a mettre le programme ou un raccourci dans le menu demarage, et il sera lancer.
Il est vrai que ce programme n'est pas évident à comprendre, car j'utilise beaucoup de chose avec des noms peu éloquant. Mais il n'est pas si compliquer que ça. Tu devrai au moins en saisir le sens général.
Si tu rencontre des problèmes en C, n'ésite pas à créer un nouveau message, tu aura alors des réponse d'autres personnes plus pédagogue que moi
Merci pour ton aide.
Je peux compiler sa sous linux? Car je ne trouve pas le logiciel que tu ma dis pour windows.
Parcontre, il me semble qu'il est intégré dans Mandriva 2006 edition gratuite
Je peux compiler sa sous linux? Car je ne trouve pas le logiciel que tu ma dis pour windows.
Parcontre, il me semble qu'il est intégré dans Mandriva 2006 edition gratuite
oui, tu peux compiler sous linux, mais le prog fonctionnera pas sous windows. Sauf si tu arrive à trouver l'option "compiler pour windows"
telecharge DevCpp, tu aura le compilateur avec.
telecharge DevCpp, tu aura le compilateur avec.
Ah la la, essayez de réfléchir. Tu créer ton .bat et de-dans tu mets :
Puis ensuite tu remplace le raccourci du programme par ce fichier bat et tu fait ça pour chaque programme.
PS : Il faut que tu remplace le programme.exe par le chemin du programme, Blabla et Nom du programme par le nom du programme.
PS² : Désolé de te répondre 2 ans après... :-(
@echo off start le programme.exe echo Le programme Blabla a ete lance le %date% a %time% >> C:\Surveillance-Nom du programme.txt
Puis ensuite tu remplace le raccourci du programme par ce fichier bat et tu fait ça pour chaque programme.
PS : Il faut que tu remplace le programme.exe par le chemin du programme, Blabla et Nom du programme par le nom du programme.
PS² : Désolé de te répondre 2 ans après... :-(
Intéressé par la question posée, j'ai essayé :
c:\echo %date% %time% >>heure.txt
Je retrouve bien le fichier "heure.txt", mais il est vide !
Merci