Programme de lancement de script par lots Windows et sortie de la console


90

J'ai un script batch que j'utilise pour lancer un programme, tel que notepad.exe. Lorsque je double-clique sur ce fichier batch, le bloc-notes démarre normalement, mais la fenêtre noire de celui cmdqui a lancé notepad.exereste en arrière-plan. Que dois-je faire pour lancer notepad.exeet faire disparaître la fenêtre cmd?

edit : est plus compliqué que d'utiliser \I.

Les cmdappels cygwin, et cygwincommence notepad. j'utilise

start \I \path\cygwin\bin\bash.exe

et la première fenêtre (cmd) disparaît, mais une deuxième fenêtre (\ cygwin \ bin \ bash.exe) est toujours en arrière-plan. Dans le script cygwin, j'ai utilisé notepad.exe &puis je quitte.

Réponses:


204
start "" "%SystemRoot%\Notepad.exe"

Gardez l' ""intervalle entre le début et le chemin de votre application.


Explication ajoutée:

Normalement, lorsque nous lançons un programme à partir d'un fichier batch comme ci-dessous, nous aurons les fenêtres noires en arrière-plan, comme l'a dit OP.

%SystemRoot%\Notepad.exe

Cela était dû au fait que le Bloc-notes s'exécutait dans la même invite de commande (processus). L'invite de commande se fermera APRÈS la fermeture du bloc-notes. Pour éviter cela, nous pouvons utiliser la startcommande pour démarrer un processus séparé comme celui-ci.

start %SystemRoot%\Notepad.exe

Cette commande est correcte tant qu'elle n'a pas d'espace dans le chemin. Pour gérer l'espace dans le chemin au cas où, nous avons ajouté les "guillemets comme ceci.

start "%SystemRoot%\Notepad.exe"

Cependant, exécuter cette commande ne ferait que démarrer une autre invite de commande vide. Pourquoi? Si vous recherchez le start /?, la startcommande reconnaîtra l'argument entre le "comme le titre de la nouvelle invite de commande qu'elle va lancer. Donc, pour résoudre cela, nous avons la commande comme celle-ci:

start "" "%SystemRoot%\Notepad.exe"

Le premier argument de ""est de définir le titre (que nous définissons comme vide), et le deuxième argument de "%SystemRoot%\Notepad.exe"est la commande cible à exécuter (qui prend en charge les espaces dans le chemin).

Si vous avez besoin d'ajouter des paramètres à la commande, ajoutez-les simplement entre guillemets, c'est-à-dire:

start "" "%SystemRoot%\Notepad.exe" "<filename>" 

12
remarque: lorsque vous souhaitez démarrer un fichier java jar de cette façon, assurez-vous d'utiliser l' javawexécutable (pas seulement java, car javava démarrer une autre fenêtre de traitement par lots): par exemplestart "" "javaw" -jar C:\JavaProject\myApp.jar
TmTron

@checksum Pourriez-vous également étendre votre exemple sur la façon de rediriger l'erreur standard et la sortie standard de l'application qui est lancée?
Starfish

@Starfish Je pense que le bloc-notes n'a ni stdout ni stderr. Mais pour votre question, ce serait quelque chose comme application.exe > stdout.txt 2>stderr.txt. Ajouter votre question à la réponse ci-dessus s'écarterait de la question originale de l'affiche. Vous pouvez peut-être commencer une nouvelle question à poser plus en détail.
somme de contrôle

1
Solution totalement insensée. Windows gagne à nouveau.
Ярослав Рахматуллин

9

Utilisez start notepad.exe.

Plus d'infos avec start /?.


1
Et précisément quel argument? /B? Je l'ai lu, mais si j'utilise start /B notepad.exela fenêtre cmd ne disparaît pas.
Possa

Ok, c'est plus compliqué que d'utiliser \I. Le cmd appelle cygwin et cygwin démarre le bloc-notes. J'utilise start \I cygwinet la première fenêtre disparaît, mais une deuxième fenêtre est toujours en arrière-plan. Dans le script cygwin j'ai utilisé notepad.exe &et puisexit
Possa

cygstart démarre le bloc-notes, mais la console reste en arrière-plan.
Possa

5

Le moyen le plus simple est de commencer par start

start notepad.exe

Ici vous pouvez trouver plus d'informations surstart


4

%ComSpec% /c %systemroot%\notepad.exe


cela ne ferme pas la fenêtre cmd%ComSpec% /c emacs.exe "-rv" "--no-splash"
jcubic

0

Hmm ... je le fais dans l'un de mes fichiers batch comme celui-ci, sans utiliser CALL ou START:

%SystemRoot%\notepad.exe ..\%URI%
GOTO ENDF

Je n'ai pas installé Cygwin et je suis sous Windows XP.


Erreur "The system cannot find the batch label specified - ENDF"sous Windows 10
jcubic

0
start "" ExeToExecute

La méthode ne fonctionne pas pour moi dans le cas de Xilinx xsdk, car comme indiqué par @jeb dans les commentaires ci-dessous, il s'agit en fait d'un fichier chauve-souris.

donc ce qui ne fonctionne pas de facto est

start "" BatToExecute

J'essaie d'ouvrir xsdk comme ça et cela ouvre un cmd séparé qui doit être fermé et xsdk peut fonctionner seul

Avant de lancer xsdk, j'exécute (source) Env / Paths (avec settings64.bat ) pour que la commande xsdk.bat soit reconnue (simplement comme xsdk, sans le .bat )

ce qui fonctionne avec .bat

call BatToExecute

2
Cela répond probablement à une question, mais pas à celle-ci. La question est de démarrer un fichier .exe ( notepad.exe) en le découplant de cmd.exe. Vous répondez comment démarrer un fichier .bat dans la même instance
jeb

-4

Essayez de commencer path\to\cygwin\bin\bash.exe


1
Cela ne répond pas vraiment à la question des PO. Il ne demandait pas par où commencer cygwin.
Jeremy J Starcher
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.