Programma di avvio dello script batch di Windows e uscita dalla console


93

Ho uno script batch che utilizzo per avviare un programma, come notepad.exe. Quando faccio doppio clic su questo file batch, il blocco note si avvia normalmente, ma la finestra nera di cmdchi è stato avviato notepad.exerimane in background. Cosa devo fare per avviare notepad.exee far scomparire la finestra di cmd?

modifica : è più complicato che usare \I.

La cmdchiama cygwine cygwinparte notepad. Io uso

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

e la prima finestra (cmd) scompare, ma una seconda finestra (\ cygwin \ bin \ bash.exe) è ancora sullo sfondo. Nello script cygwin che ho usato notepad.exe &e poi esco.

Risposte:


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

Mantieni l'intervallo ""tra l'inizio e il percorso dell'applicazione.


Aggiunta spiegazione:

Normalmente quando lanciamo un programma da un file batch come di seguito, avremo le finestre nere sullo sfondo come ha detto OP.

%SystemRoot%\Notepad.exe

Ciò è stato causato dal blocco note in esecuzione nello stesso prompt dei comandi (processo). Il prompt dei comandi verrà chiuso DOPO la chiusura del blocco note. Per evitare ciò, possiamo usare il startcomando per avviare un processo separato come questo.

start %SystemRoot%\Notepad.exe

Questo comando va bene finché non ha spazio nel percorso. Per gestire lo spazio nel percorso per ogni evenienza, abbiamo aggiunto le "virgolette in questo modo.

start "%SystemRoot%\Notepad.exe"

Tuttavia, l'esecuzione di questo comando avvierebbe solo un altro prompt dei comandi vuoto. Perché? Se cerchi il start /?, il startcomando riconoscerà l'argomento tra il "come titolo del nuovo prompt dei comandi che sta per lanciare. Quindi, per risolverlo, abbiamo il comando come questo:

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

Il primo argomento di ""è impostare il titolo (che abbiamo impostato come vuoto) e il secondo argomento di "%SystemRoot%\Notepad.exe" è il comando di destinazione da eseguire (che supporta gli spazi nel percorso).

Se è necessario aggiungere parametri al comando, è sufficiente aggiungerli tra virgolette, ad esempio:

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

12
nota: quando vuoi avviare un file jar java in questo modo, assicurati di usare l' javaweseguibile (non solo java, perché javaavvierà un'altra finestra batch): esstart "" "javaw" -jar C:\JavaProject\myApp.jar
TmTron

@checksum Potresti anche estendere il tuo esempio su come reindirizzare l'errore standard e l'output standard dell'applicazione che viene avviata?
Starfish

@Starfish Penso che il blocco note non abbia stdout e stderr. Ma per la tua domanda, sarebbe qualcosa di simile application.exe > stdout.txt 2>stderr.txt. Aggiungere la tua domanda alla risposta sopra sarebbe deviare dalla domanda originale del poster. Forse puoi iniziare una nuova domanda da porre in modo più dettagliato.
checksum

1
Soluzione assolutamente insensata. Windows vince ancora.
Ярослав Рахматуллин

9

Uso start notepad.exe .

Maggiori informazioni con start /?.


1
E precisamente quale argomento? /B? L'ho letto, ma se uso start /B notepad.exela finestra cmd non scompare.
Possa

Ok, è più complicato che usare \I. Il cmd chiama cygwin e cygwin avvia il blocco note. Io uso start \I cygwine la prima finestra scompare, ma una seconda finestra è ancora sullo sfondo. In cygwin script ho usato notepad.exe &e poiexit
Possa

cygstart avvia il blocco note, ma la console rimane in background.
Possa

5

Il modo più semplice è iniziare con start

start notepad.exe

Qui puoi trovare maggiori informazioni sustart


4

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


questo non chiude la finestra di cmd%ComSpec% /c emacs.exe "-rv" "--no-splash"
jcubic

0

Hmm ... lo faccio in uno dei miei file batch come questo, senza usare CALL o START:

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

Tuttavia non ho Cygwin installato e sono su Windows XP.


Ho ricevuto un errore "The system cannot find the batch label specified - ENDF"su Windows 10
jcubic

0
start "" ExeToExecute

il metodo non funziona per me nel caso di Xilinx xsdk, perché come sottolineato da @jeb nei commenti qui sotto è effettivamente un file bat.

quindi ciò che di fatto non funziona è

start "" BatToExecute

Sto cercando di aprire xsdk in questo modo e apre un cmd separato che deve essere chiuso e xsdk può essere eseguito da solo

Prima di avviare xsdk eseguo (sorgente) Env / Paths (con settings64.bat ) in modo che il comando xsdk.bat venga riconosciuto (semplicemente come xsdk, senza .bat )

cosa funziona con .bat

call BatToExecute

2
Questo probabilmente risponde a una domanda, ma non a questa. La domanda riguarda l'avvio di un file .exe ( notepad.exe) con il disaccoppiamento da cmd.exe. Rispondi a come avviare un file .bat nella stessa istanza
jeb

-4

Prova ad iniziare path\to\cygwin\bin\bash.exe


1
Questo non risponde veramente alla domanda dei PO. Non stava chiedendo come iniziare cygwin.
Jeremy J Starcher
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.