Rechercher : dans
Par :

Lancer xcopy apres un .exe dans un .bat

Dernière réponse le 11 jui 2008 à 13:55:27 Abdias, le 11 jui 2008 à 09:50:42 
 Signaler ce message aux modérateurs

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

1

BlueMind, le 11 jui 2008 à 09:54:41

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.
A quoi bon soulever des montagnes quand il est si simple de passer par-dessus ?

Répondre à BlueMind

2

vViLLiaM, le 11 jui 2008 à 09:55:32

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.

Répondre à vViLLiaM

3

Nabla's, le 11 jui 2008 à 09:55:51

--
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"

Répondre à Nabla's

4

Abdias, le 11 jui 2008 à 10:31:05

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

Répondre à Abdias

5

Abdias, le 11 jui 2008 à 10:42:28

Reste plus qu'un détail
cacher la fenetre dos !
une idée ?

Répondre à Abdias

6

Nabla's, le 11 jui 2008 à 11:46:56

En faisant start /? je vois un parametre B qui devrai te convennir ... j ai pas testé

Répondre à Nabla's

7

Abdias, le 11 jui 2008 à 12:22:38

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 ?

Répondre à Abdias

8

zavenger, le 11 jui 2008 à 12:24:27

Bonjour et pourquoi pas simplement

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

Répondre à zavenger

9

Abdias, le 11 jui 2008 à 12:33:39

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):bool­ean;
{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 ?

Répondre à Abdias

10

zavenger, le 11 jui 2008 à 12:43:31

Donc

cmd /K "C:\Program Files\Dossier\start.exe"
xcopy C:\Dossiers D:\Dossiers\ /s/y

Répondre à zavenger

11

Abdias, le 11 jui 2008 à 13:05:01

Non ca fonctionne pas

Répondre à Abdias

12

zavenger, le 11 jui 2008 à 13:11:27

Je n'ai plus d'idees dsl

Répondre à zavenger

14

Abdias, le 11 jui 2008 à 13:17:30

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 :

http://sub0.developpez.com/delphi/gobat.zip

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

Répondre à Abdias

13

Nabla's, le 11 jui 2008 à 13:15:32

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

Répondre à Nabla's

15

Abdias, le 11 jui 2008 à 13:27:23

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)

Répondre à Abdias

16

Nabla's, le 11 jui 2008 à 13:31:40

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

Répondre à Nabla's

17

Abdias, le 11 jui 2008 à 13:42:33

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

Répondre à Abdias

18

 Nabla's, le 11 jui 2008 à 13:55:27

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

Répondre à Nabla's
Collection CommentÇaMarche.net