Come chiudere automaticamente la finestra di cmd dopo l'esecuzione del file batch?


90

Sto eseguendo un file batch che ha queste due righe:

start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"
"C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow

Questo file batch viene utilizzato per eseguire l'applicazione Xming e quindi l'app PuTTY in modo da poter accedere in SSH al laboratorio informatico della mia università.

Tuttavia, se lo eseguo e Xming non è già aperto, una volta uscito dal terminale PuTTY la finestra di cmd rimane aperta. Solo se ho già eseguito Xming, la finestra di cmd si chiude quando chiudo il terminale PuTTY. Ho provato ad aggiungere exitall'ultima riga del file batch, ma senza alcun risultato.


1
è "C:\Program Files (x86)\Xming\Xming.exe"un parametro di putty.exe o un comando separato?
bpoiss

Se la seconda riga è un secondo comando, prova ad aggiungere anche start prima di quello.
Grigio

1
@BernhardPoiss è un comando separato, NON un parametro per putty.exe. Se metto prima quella linea, si blocca e apro lo stucco. Se metto inizio davanti, Windows dice "Impossibile trovare" C: \ Program ". Assicurati che sia digitato correttamente.
yiwei

Risposte:


136

Modificare il file batch su STARTentrambi i programmi, invece di STARTimportarne uno e CALLun altro

start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"
start "" "C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow

Se lo esegui in questo modo, nessuna finestra CMD rimarrà aperta dopo l'avvio del programma.


29
+1 tranne quando si utilizzano virgolette doppie per il percorso, è necessario aggiungere un primo parametro ""quando il titolo diventa obbligatorio. Il secondo comando dovrebbe essere start "" "C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindowaltrimenti proverà ad aprire una finestra di comando intitolata C:\Program Files (x86)\Xming\Xming.exetentando di eseguire :0con parametri-clipboard -multiwindow
Patrick Meinecke

Inoltre, questo start /B "GCFScape" "x64\GCFScape.exe">nulesempio è stato utile per me
xacinay,

4
"Se il comando è un comando cmd interno o un file batch, il processore dei comandi viene eseguito con l'opzione / K su cmd.exe. Ciò significa che la finestra rimarrà dopo che il comando è stato eseguito." ss64.com/nt/start.html
CAD bloke

3
@CADbloke Il tuo problema menzionato può essere risolto usandocmd.exe /C "start cmd.exe /C [...].bat ..."
Thorsten Schöning

1
@ patrick-meinecke Grazie per aver aggiunto il commento su "", ero frustrato dal fatto che questo mi stesse causando problemi. Ho letto il tuo commento e ne è seguito un momento.
Michael Eakins

21

Normalmente finisci un file batch con una riga che dice solo exit. Se vuoi assicurarti che il file sia stato eseguito e che la finestra DOS si chiuda dopo 2 secondi, puoi aggiungere le righe:

timeout 2 >nul
exit

Ma il exitcomando non funzionerà se il tuo file batch apre un'altra finestra, perché mentre la seconda finestra è aperta verrà visualizzata anche la vecchia finestra DOS.

SOLUZIONE: Ad esempio, c'è un piccolo programma gratuito chiamato BgInfo che mostrerà tutte le informazioni sul tuo computer. Supponendo che sia in una directory chiamata C:\BgInfo, per eseguirlo da un file batch con lo /popupswitch e per chiudere la finestra DOS mentre è ancora in esecuzione, utilizzare:

start "" "C:\BgInfo\BgInfo.exe" /popup
exit

l'aver /popupeffettivamente mi dava un errore. Dopo aver rimosso tutto ha funzionato
Dmitry Efimenko

5

Se vuoi separare i comandi in un comando per file, puoi farlo

cmd /c start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"

e nell'altro file puoi fare

cmd /c start "" "C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow

Il comando cmd / c chiuderà la finestra del prompt dei comandi dopo l'esecuzione dell'exe.


3

Questo ha funzionato per me. Volevo solo chiudere automaticamente la finestra di comando dopo essere uscito dal gioco. Faccio semplicemente doppio clic sul file .bat sul desktop. Nessuna scorciatoia.

taskkill /f /IM explorer.exe
C:\"GOG Games"\Starcraft\Starcraft.exe
start explorer.exe
exit /B

1

Avevo questo, ho aggiunto EXITe inizialmente non ha funzionato, immagino che per richiedere il called program exitingconsiglio menzionato in un'altra risposta qui, tuttavia ora funziona senza ulteriori indugi - non sono sicuro di cosa abbia causato questo, ma il punto da notare è che sto chiamando un file di dati .htmlpiuttosto che il programma che gestisce browser.exe, non ho modificare altro che basti dire che è molto più ordinato solo utilizzando un file bat per accedere alle pagine di accesso principali di tali documenti web e solo avendo title.bat, contents.bat,index.bat nella cartella principale con il resto del contenuto in una sottocartella.

cioè: content.bat legge

cd subfolder
"contents.html"
exit

Sembra anche migliore se cambio le icone del file bat solo per quegli elementi per adattarli al contesto in cui si trovano, ma questa è un'altra questione, nascondendo i file bat nella sottocartella e creando scorciatoie per icone personalizzate nella cartella principale con le immagini ha chiesto la personalizzazione anche nascosta.


1

Potresti provare con un po 'pericoloso: taskkill /IM cmd.exe..bcz pericoloso che ucciderà il cmd che è aperto e tutti i cmd aperti prima di esso.

Oppure aggiungi una verifica per confermare di avere il cmd.exe corretto e poi uccidilo tramite PID, come questo:

set loc=%time%%random%
title=%loc%
for /f "tokens=2 delims= " %%A in ('tasklist /v ^| findstr /i "%loc%"') do (taskkill /PID %%A) 

Sostituto (pslist &&A)o (tasklist /FI "PID eq %%A")per l' (taskkill /PID %%A)se si desidera controllare in primo luogo (e forse hanno installato PsTools).


0

Prova /scome elencato di seguito.

Come ultima riga nel tipo di file batch:

exit /s

Il comando precedente chiuderà la finestra CMD di Windows.

/s - sta per muto come in (aspetterebbe un input dalla tastiera).


1
cmdIl comando di uscita di non ha un /sinterruttore (e sarebbe comunque inutile)
Stephan

-1

Aggiungi questo codice alla fine del codice di esecuzione

c: \ windows> esci


1
hai letto l'ultima frase della domanda ?:I've tried adding exit to the last line of the batch file, but to no avail.
Stephan

Ho aggiunto l'uscita alla fine del mio script e ha effettivamente risolto il mio problema.
Attila
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.