Lancer xcopy apres un .exe dans un .bat

Résolu
Abdias -  
 Patpat -
Bonjour,
j'aimerai faire ce type de .bat :

en 1 (lancer un executable)

start C:\Program Files\Dossier\start.exe

en 2 (apres fermeture du programme lancer en 1 sauvegarder les données)

Xcopy C:\Dossiers D:\Dossiers\ /s/y

j'ai deux souci

en 1 : sous vista j'ai une erreur :
Windows ne trouve pas 'C:\Program'. Vérifiez que vous avez entré le nom correct, puis réessayez
il transforme donc 'Program Files' en 'Program'

en 2 comment lancer xcopy après la fermeture de start.exe
Configuration: Windows Vista
Firefox 2.0.0.15

11 réponses

  1. Abdias
     
    J'ai trouvé !

    Pour en 1 (lancer un executable)
    start C:\Program Files\Dossier\start.exe

    Il faut effectivement rajouter les guillemets. MAIS cela ouvre une nouvelle session Cmd.exe avec la commande C:\Program Files\Dossier\start.exe comme titre de la fenêtre de console

    Voici ce que j'ai trouvé comme info :
    La commande Start démarre un programme ou une commande dans une nouvelle fenêtre de console. Mais si vous essayez de démarrer un programme à partir d’un répertoire qui contient des espaces (ou si le nom du programme contient lui-même des espaces), la commande Start ne se comportera pas comme prévu.
    
    Ainsi, la commande suivante Start "C:\Program Files\Microsoft Office\Office\Winword.exe" ne démarre pas Microsoft Word, comme vous pourriez le croire. Au lieu de cela, la commande Start ouvre une nouvelle session Cmd.exe avec la chaîne entre guillemets comme titre de la fenêtre de console. Explication : la commande Start utilise la première chaîne entre guillemets sur sa ligne de commande, comme un titre de fenêtre de console.
    
    Pour contourner cela, utilisez une paire de guillemets pour spécifier un titre vierge, puis faites suivre le titre par le programme que vous voulez exécuter. La commande Start corrigée se présentera ainsi : Start "" "C:\Program Files\Microsoft Office\Office\Winword.exe"


    Il faut donc mettre :

    start "" "C:\Program Files\Dossier\start.exe"

    Maintenant pour lancer la commande xcopy après la fermeture de start.exe voici l'info que j'ai trouvé pour la command start :

    /w [attendre] Ne retourne pas tant que l'ancien programme existe.

    En résumé

    Au lieu de :
    start C:\Program Files\Dossier\start.exe
    Xcopy C:\Dossiers D:\Dossiers\ /s/y

    il faut
    start /w "" "C:\Program Files\Dossier\start.exe"
    xcopy C:\Dossiers D:\Dossiers\ /s/y


    Merci pour votre participation
    2
  2. BlueMind Messages postés 583 Statut Membre 159
     
    Bonjour,

    Pour le point 1, c'est simple suffit d'ajouter les guillemets

    start "C:\Program Files\Dossier\start.exe"

    Pour le point 2 je ne suis pas certain mais essaye de supprimer le start afin de ne pas ouvrir une deuxième session dos.
    0
  3. vViLLiaM Messages postés 42 Statut Membre 5
     
    Salut !

    Tout d'abord ta 1ère erreur vient du fait qu'il y a des espaces dans ta ligne de commande, entre Programs et Files par exemple, il faut que tu mettes tout le chemin du fichier .exe entre guillemets.
    0
  4. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    --
    au lieu de program files, il faut taper Progra~1
    c est l espace qui pose probleme sous dos, il sait pas si c est un nouveau parametre ou la suite...
    sinon, tu dois pour voir mettre entre guillements "c:\program files"
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Abdias
     
    Reste plus qu'un détail
    cacher la fenetre dos !
    une idée ?
    0
  7. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    en faisant start /? je vois un parametre B qui devrai te convennir ... j ai pas testé
    0
    1. Abdias
       
      Non cela fonctionne pas
      par contre j'ai trouvé ceci :

      ShellExecute(Handle, Nil, 'CMD' , '/k "C:/xxx.bat"', Nil ,SW_HIDE);


      mais cette commande je l'execute comment ?
      0
  8. zavenger Messages postés 817 Statut Membre 161
     
    Bonjour et pourquoi pas simplement

    "C:\Program Files\Dossier\start.exe"
    xcopy C:\Dossiers D:\Dossiers\ /s/y
    0
    1. Abdias
       
      car en faisant cela ca copie les fichier juste après l'ouverture de l'exe et non la fermeture
      sinon j'ai encore trouvé cela pour cacher la fenêtre de commande

      function LanceBatchAttenteFin(NomFichier:string;visible:boolean):boolean;
      {permet de lancer un batch. NomFichier est le nom avec chemin     }
      {de ce batch ou d'un raccourci qui pointe vers cet exécutable.   }
      { notre programme est arrété tant que l'exécutable n'est pas fini      }
      {tout est arrété on ne peut donc même plus déplacer sa fenêtre.        }
      {mettre visible à false pour cacher la fenêtre du batch}
      { il est donc préférable de la rendre invisible avant le lancement     }
      {de cette fonction.                                                    }
      { LanceAppliAttenteFin renvoie true si le lancement s'est bien passé   }
      var
        StartInfo : TStartupInfo;
        ProcessInformation : TProcessInformation;
        i:integer;
      begin
        if visible then
        i:=0
        else
        i:=CREATE_NO_WINDOW;
        result:=true;
        ZeroMemory(@StartInfo, sizeof(StartInfo)); // remplie de 0 StartInfo
        StartInfo.cb:=sizeof(StartInfo);
        if CreateProcess(nil,PChar(NomFichier),nil,nil,true,i,nil,nil,
        StartInfo,ProcessInformation)
        then WaitForSingleObject(ProcessInformation.hProcess, INFINITE)// attend que l'application désignée par le handle ProcessInformation.hProcess soit terminée
        else result:=false;
      end;


      ou ceci

      Avec Delphi, c'est encore plus simple, en utilisant des fonctions de haut niveau :
      PROGRAM gobat;
      USES Forms,ShellApi;{$R *.RES}
      BEGIN
      ShellExecute(Application.Handle,NIL,'go.bat','','',0);
      END.
      


      mais on lance comment leur truc ?, on crée un fichier comme un .bat et on mets une autre extension ?
      0
      1. zavenger Messages postés 817 Statut Membre 161 > Abdias
         
        donc

        cmd /K "C:\Program Files\Dossier\start.exe"
        xcopy C:\Dossiers D:\Dossiers\ /s/y
        0
      2. Abdias > zavenger Messages postés 817 Statut Membre
         
        Non ca fonctionne pas
        0
      3. zavenger Messages postés 817 Statut Membre 161 > Abdias
         
        je n'ai plus d'idees dsl
        0
      4. Abdias > zavenger Messages postés 817 Statut Membre
         
        Il n'y a pas de souci
        vu que la commande suivant fonctionne
        start /W "" "C:\Program Files\Dossier\start.exe"

        par contre pour supprimé la fenêtre de commande j'ai trouvé ceci :

        https://www.developpez.com/telechargements/auth/id/093babf0407c8f2437821cc486b11d93

        on obtient deux fichiers dans ce gobat.zip
        -gobat.dpr
        -gobat.exe

        il suffit d'y ajouter son fichier.bat en le nommant go.bat
        et le fichier bat se lance sans l'apparition de la fenêtre de commande
        0
  9. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    un truc que je n ai pas saisi, pourquoi es ce que tu utilises la fonction starx pour demarer tes applications, si apres tu galère pour attendre qu elles finissent ?

    start ouvre dans une nouvelle fenetre, ca rend les applications non bloquantes. mais toi tu veux attendre qu elles se finissent...

    a ta place, j indiquerait simplement le nom du programme a executer, puis ensuite la copie ...

    par contre pour cahcer la fenetre, je sais pas sous dos, par contre tu peux faire start /min
    0
    1. Abdias
       
      Je ne galère pas du tout à attendre que cela finisse vu que start /W attends justement que la commande soit fini pour passer à la suivante donc en faisant
      start /w "test.exe"
      xcopy c: d:

      une fois l'exécutable test fermé ca passe directement à la commande xcopy
      ce qui me donne le résultat recherché : pourvoir lancer automatiquement la sauvegarde des données d'un programme une fois que celui ci sera fermé

      le seul inconvenant c'est que cela m'ouvre une fenêtre de commande que j'ai réussi a supprimé en passant par une exécutable que j'ai trouvé ailleurs (voir post au dessus)
      0
  10. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    ok.

    interessant le fichier.
    par contre, le start /w "test.exe"
    reviens a faire juste "test.exe"

    evidement, le start (que tu m as fait decouvrir) permet de gerer la priorité du processus, ce qui peut etre interessant
    0
    1. Abdias
       
      l'avantage de start /W c'est que cela attends la fin de la commande pour passer à la commande suivante
      et ma fenetre de commande se ferme ensuite automatiquement
      0
      1. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228 > Abdias
         
        oui, mais si tu fais test.exee tout simplement, le programme s execute dans la meme fenetre, est bloquant, c est a dire qu il faut que le programme soit fini pour passer a la fenetre suivante, et la fenetre se ferme aussi il me semble
        -1
  11. @xi@g@me
     
    J'ai lu rapide et je n'ai pas revu de référence à shellExecute, alors je précise : ceci est une fonction utilisée dans le langage de programmation C, et présente dans les librairies windows, qui permet d'exécuter un programme exécutable avec des paramètres. Ce n'est pas utilisable en batch
    0
  12. Patpat
     
    Bonjour

    Dans le post au dessus Abdias propose d'utiliser "gobat.exe" sont source est

    PROGRAM gobat;
    USES Forms,ShellApi;
    BEGIN
    ShellExecute(Application.Handle,NIL,'go.bat','','',0);
    END.

    un programme Delphi ou Pascal qui utilise "ShelleExcecute"
    Pour mon cas, j'ai pu lancer un exécutable avec un paramètres, ce que je recherchais depuis un certain temps
    0