Batch probleme condition

Résolu
Xima Messages postés 205 Statut Membre -  
cchristian Messages postés 928 Statut Membre -
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
--
_________________________________________
Vu sur la porte d'un bar : "L'abus de modération, nuit gravement à la consommation"
Configuration: Windows Vista
Firefox 3.0.1

4 réponses

  1. cchristian Messages postés 928 Statut Membre 131
     
    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
    1. Xima Messages postés 205 Statut Membre 30
       
      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
      1. cchristian Messages postés 928 Statut Membre 131 > Xima Messages postés 205 Statut Membre
         
        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
      2. Xima Messages postés 205 Statut Membre 30 > cchristian Messages postés 928 Statut Membre
         
        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
  2. Xima Messages postés 205 Statut Membre 30
     
    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
  3. cchristian Messages postés 928 Statut Membre 131
     
    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
  4. Xima Messages postés 205 Statut Membre 30
     
    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
    1. cchristian Messages postés 928 Statut Membre 131
       
      Bonne continuation,
      -1