Lancer xcopy apres un .exe dans un .bat

Résolu/Fermé
Abdias - 11 juil. 2008 à 09:50
 Patpat - 21 janv. 2011 à 21:22
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
A voir également:

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
BlueMind Messages postés 583 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008 159
11 juil. 2008 à 09:54
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
vViLLiaM Messages postés 35 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 21 janvier 2009 5
11 juil. 2008 à 09:55
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
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
11 juil. 2008 à 09:55
--
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Reste plus qu'un détail
cacher la fenetre dos !
une idée ?
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
11 juil. 2008 à 11:46
en faisant start /? je vois un parametre B qui devrai te convennir ... j ai pas testé
0
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
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161
11 juil. 2008 à 12:24
Bonjour et pourquoi pas simplement

"C:\Program Files\Dossier\start.exe"
xcopy C:\Dossiers D:\Dossiers\ /s/y
0
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
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161 > Abdias
11 juil. 2008 à 12:43
donc

cmd /K "C:\Program Files\Dossier\start.exe"
xcopy C:\Dossiers D:\Dossiers\ /s/y
0
Abdias > zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012
11 juil. 2008 à 13:05
Non ca fonctionne pas
0
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161 > Abdias
11 juil. 2008 à 13:11
je n'ai plus d'idees dsl
0
Abdias > zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012
11 juil. 2008 à 13:17
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
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
11 juil. 2008 à 13:15
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
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
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
11 juil. 2008 à 13:31
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
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
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192 > Abdias
11 juil. 2008 à 13:55
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
0
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
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