Lancer xcopy apres un .exe dans un .bat

[Résolu/Fermé]
Signaler
-
 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

11 réponses

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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Messages postés
583
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
22 juillet 2008
157
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.
Messages postés
35
Date d'inscription
lundi 7 juillet 2008
Statut
Membre
Dernière intervention
21 janvier 2009
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.
Messages postés
18143
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 181
--
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"
Reste plus qu'un détail
cacher la fenetre dos !
une idée ?
Messages postés
18143
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 181
en faisant start /? je vois un parametre B qui devrai te convennir ... j ai pas testé
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 ?
Messages postés
809
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
20 avril 2012
157
Bonjour et pourquoi pas simplement

"C:\Program Files\Dossier\start.exe"
xcopy C:\Dossiers D:\Dossiers\ /s/y
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 ?
Messages postés
809
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
20 avril 2012
157 > Abdias
donc

cmd /K "C:\Program Files\Dossier\start.exe"
xcopy C:\Dossiers D:\Dossiers\ /s/y
>
Messages postés
809
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
20 avril 2012

Non ca fonctionne pas
Messages postés
809
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
20 avril 2012
157 > Abdias
je n'ai plus d'idees dsl
>
Messages postés
809
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
20 avril 2012

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
Messages postés
18143
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 181
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
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)
Messages postés
18143
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 181
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
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
Messages postés
18143
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 181 > 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
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
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