Batch probleme condition

Résolu/Fermé
Xima Messages postés 196 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 20 janvier 2011 - 20 août 2008 à 23:57
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 - 25 août 2008 à 19:00
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

cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
21 août 2008 à 11:37
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%).
-1
Xima Messages postés 196 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 20 janvier 2011 30
21 août 2008 à 11:43
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"
-1
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131 > Xima Messages postés 196 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 20 janvier 2011
21 août 2008 à 19:15
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 ....................
-1
Xima Messages postés 196 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 20 janvier 2011 30 > cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012
21 août 2008 à 20:01
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"
-1
Xima Messages postés 196 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 20 janvier 2011 30
24 août 2008 à 17:04
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"
-1
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
24 août 2008 à 19:58
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.
-1
Xima Messages postés 196 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 20 janvier 2011 30
25 août 2008 à 17:58
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"
-1
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
25 août 2008 à 19:00
Bonne continuation,
-1