Batch probleme condition [Résolu/Fermé]

Signaler
Messages postés
197
Date d'inscription
lundi 24 septembre 2007
Statut
Membre
Dernière intervention
20 janvier 2011
-
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
-
Bonjour,
j'aimerais créer un fichier batch qui me permete de lancer des fichiers, et que si on le relance il ferme ces fichiers...
mais je n'arrive pas à créer la condition

if (not?)"%VARIABLE%"=="..." goto stop

je ne sais pas comment crééer la condition : "si la variable est ouvert, goto stop" ou "si la variable n'est pas fermée, goto stop"
en sachant que la variable et une application

merci de votre aide

4 réponses

Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
116
Bonjour,

Je ne suis pas certain d'avoir compris le problème, je résume ce que je crois avoir compris :

En fonction de la présence ou de l'absence d'un process en mémoire tu souhaite(rai)s qu'un fichier .bat active (j'aimerais créer un fichier batch qui me permete de lancer des fichiers) ou désactive (et que si on le relance il ferme ces fichiers... ) l'exécution correspondant à ce process.
En d'autres termes, si l'application est en cours d'exécution au moment ou le .bat est exécuté il doit stopper cette exécution, dans le cas contraire il doit lancer l'exécution de cette application. Les deux situations étant pilotées par la variable (%VARIABLE%).
Messages postés
197
Date d'inscription
lundi 24 septembre 2007
Statut
Membre
Dernière intervention
20 janvier 2011
31
oui c'est ça que je voulais faire, mais de toute façon il semble qu'il est impossible de fermer le processus sans le tuer...
et à ce moment là ça ne me sert plus à rien...
merci quand meme
_________________________________________
Vu sur la porte d'un bar : "L'abus de modération, nuit gravement à la consommation"
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
116 >
Messages postés
197
Date d'inscription
lundi 24 septembre 2007
Statut
Membre
Dernière intervention
20 janvier 2011

Oui, en effet, à moins .............

d'admettre que l'appli en question interroge de façon cyclique une entité externe (par exemple un fichier
présent ou absent) créée par le .bat lorsque l'appli est active. (Un fichier ou une valeur, un flag, présent dans un fichier paramètre par exemple)

-Lancement du .bat
-- Appli active ?
--- oui ==> création du fichier ==> sa présence entraîne l'arrêt de l'appli (interrogation cyclique).
--- non ==> lancement de l'appli .
- En fin d'exécution de l'appli tentative systématique de destruction du fichier quelque soit l'origine du lancement
de l'exécution (par le .bat ou non) et de l'issue de son traitement (fin normale ou fin due à l'interaction relative à l'activation du .bat au cours de l'exécution de l'appli).

Mais c'est lourd ....................
Messages postés
197
Date d'inscription
lundi 24 septembre 2007
Statut
Membre
Dernière intervention
20 janvier 2011
31 >
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012

ouais , mais non^^
là ça devient un peu compliqué...
c'est pas grave je fermerais mes application à la souris...
_________________________________________
Vu sur la porte d'un bar : "L'abus de modération, nuit gravement à la consommation"
Messages postés
197
Date d'inscription
lundi 24 septembre 2007
Statut
Membre
Dernière intervention
20 janvier 2011
31
Finalement, ça me va si l'application est tué...
alors je repose ma question :
j'ai un batch qui lance une application
un autre qui la ferme (la tue)
maintenant j'aimerais les mettre ensemble avec un IF :
si l'application est déjà lancé, on la ferme
ou l'inverse
si l'application n'est pas lancé on la lance

j'ai codé ça mais ça ne marche pas :
pslist | find "app.exe" /C /i > nul

if not ERRORLEVEL 1 Goto stop

start app.exe

exit

:stop
pskill -t app.exe

exit

_________________________________________
Vu sur la porte d'un bar : "L'abus de modération, nuit gravement à la consommation"
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
116
Bonjour,

Plutôt qu'extraire les séquences qui t'intéressent, je t'envoie un fichier .bat , un utilitaire que j'ai écrit il y a quelques temps déjà, il affiche:

1) - Les process en cours en répondant 1 au message : Pour afficher la liste tapez 1 sinon tapez 2:

                         LISTE DES PROCESS ACTIFS :
     --------------------------------------------------------------------------
      1 System Idle Process            0 Console                 0         28 K
      2 System                         4 Console                 0         84 K
      3 smss.exe                     772 Console                 0        152 K
      4 csrss.exe                    836 Console                 0      2768 K
      5 ..................             .......................

2) - Le process (optionnel) passé en paramètre %1 à l'exécution de ce .bat ex : applirun explorer

  40 explorer.exe                3496 Console                 0     26ÿ824 K

(j'ai encadré par 2 lignes d'astérisques la séquence qui devrait t'intéresser plus particulièrement)

--------------------------------------------------------------------------------------------------------------------
       @ECHO OFF
REM ----------------------------------------------------------------------------
REM            applirun   BATCH D'IDENTIFICATION DES PROCESS ACTIFS.
REM ----------------------------------------------------------------------------
REM Ce batch crée une liste des process actifs puis il effectue une recherche
REM   dans le contenu de cette liste sur le critère nom du process passé en
REM   paramètre (%1).
REM                    --------------------------------
REM tasklist : commande inexistante sur Windows XP, elle a été rappatriée dans
REM    c:\Windows\System32 à partir de:
REM                   http://speedweb1.free.fr/download/utilitaire/tasklist.exe
REM ----------------------------------------------------------------------------
	@SETLOCAL ENABLEDELAYEDEXPANSION

        @MODE   CON        COLS=150            LINES=90

        @ECHO.
        @ECHO.
        @ECHO  %0.
        @ECHO.

        @SET "ENVIRON=C:\Documents and Settings\christian\Mes Documents\OUTJOB"
        @CD  %ENVIRON%

        @SET    "cadre=   ---------------------------------------------------"
        @SET    "cadre=!cadre!-----------------------"
        @SET    "EXISTE=%1 : PROCESS INACTIF OU INCONNU"
	@SET /A "nb_process=0"
	@SET /A "no_process=0"
	@SET /A "list=0"

        @IF  "%1"   ==  ""                           ( @SET /A "list=1" )
        @IF  "%1"   ==  "*"                          ( @SET /A "list=1" )
        @IF  "%2"   ==  "*"                          ( @SET /A "list=1" )

        tasklist                                             > listemp.txt

rem     Numérotation (des lignes) des process actifs.
        @FOR /F "skip=3 tokens=1-1* delims=:" %%i in (listemp.txt)    DO      (
            @SET  	/A "no_process+=1"
            @SET "zero="
            @IF !no_process!  LSS  10               ( SET "zero= " )
            @ECHO    !zero!!no_process! %%i                 >>  listproces.txt)

rem     test de présence (%1) et affichage du (des) process si %1 est renseigné.
	@IF "%1"      ==    ""                                  (
          @ECHO.
          @ECHO  AUCUNE DEMANDE DE RECHERCHE DE PROCESSUS
          @SET   "EXISTE=."
        ) ELSE (
rem **************************************************************************
          @FOR /F "tokens=1-3* delims=:"   %%i in                (
             ' TYPE "listproces.txt"  ^|  @FINDSTR /I /N %1 '    )    DO  (
             @ECHO  %%j%%k
  	     @SET  /A "nb_process+=1"
             @SET "EXISTE=Nb.de process %1 ACTIF(S) !nb_process! / %no_process%"
                                                                          )
               )
rem **************************************************************************

        @ECHO.   				
        @ECHO   %EXISTE%
        @ECHO.   				

rem     TEST DEMANDE D'AFFICHAGE (A LA CONSOLE) DE LA LISTE DES PROCESS ACTIFS:
        IF   NOT "%list%"   ==  "1"                              (
              CHOICE /C:12 /N "  Pour afficher la liste tapez 1 sinon tapez 2: "
              IF ERRORLEVEL == 2 ( SET /A "list=2" & GOTO LISTE )
              IF ERRORLEVEL == 1 ( SET /A "list=1"              ) )

:LISTE

        @IF  "%list%"   ==  "1"                                    (
            @ECHO.
            @ECHO                           LISTE DES PROCESS ACTIFS :
            @ECHO    %cadre%
            @FOR /F "tokens=1-1 delims=:" %%i in (listproces.txt) DO (
                 @ECHO    %%i                                        )
            @ECHO    %cadre%                                       )

        @CD  %ENVIRON%
        @IF  EXIST     "listproces.txt" 	( ERASE   "listproces.txt" )
        @IF  EXIST     "listemp.txt" 	        ( ERASE   "listemp.txt"    )

:EOF
--
Cordialement.

Cchristian.
Messages postés
197
Date d'inscription
lundi 24 septembre 2007
Statut
Membre
Dernière intervention
20 janvier 2011
31
merci de ton aide, mais, j'ai trouvé le problème dans mon batch...
j'ai utilisé la commande pslist comme tasklist...
en fait il ne fallait pas mettre
pslist | find "app.exe" /C /i > nul

mais simplement:
pslist app



_________________________________________
Vu sur la porte d'un bar : "L'abus de modération, nuit gravement à la consommation"
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
116
Bonne continuation,