Come posso eseguire un programma da un file batch senza lasciare la console aperta dopo l'avvio del programma?


184

Per il momento il mio file batch è simile al seguente:

myprogram.exe param1

Il programma si avvia ma la finestra DOS rimane aperta. Come posso chiuderlo?


3
Probabilmente dovresti cambiare la risposta accettata a quella pubblicata da Marshall.
Rev1.0

Risposte:


163

È possibile utilizzare la parola chiave exit. Ecco un esempio da uno dei miei file batch:

start myProgram.exe param1
exit

18
Si noti che ciò non funzionerà se si utilizza la console in modo interattivo anziché fare semplicemente doppio clic su un file batch. Generalmente non c'è quasi bisogno di inserire exitun file batch.
Joey,

27
Ho provato questo comando in Win8. Non sono sicuro che sia diverso, ma nota che devi fornire un titolo Window come primo parametro. Quando l'avrei eseguito come descritto da Patrick, avrebbe semplicemente aperto un nuovo prompt dei comandi con "myProgram.exe" come titolo della finestra:start "VPN" "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe"
Adam Plocher

9
Si noti che se il comando contiene spazi e lo si inserisce tra virgolette, è necessario aggiungere prima un parametro tra virgolette, poiché START interpreta il primo parametro tra virgolette come nome della finestra e solo il secondo parametro seguente come nome del comando.
David Balažic,

259

Utilizzare il comando start per impedire al file batch di attendere il programma. Basta ricordare di mettere una doppia virgoletta vuota davanti al programma che si desidera eseguire dopo "Start". Ad esempio, se si desidera eseguire Visual Studio 2012 da un comando batch:

Start ""  "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"

notare la doppia citazione dopo l'inizio.


55
@SharkAlley Il formato corretto èstart <window name> <program name>
Kruug,

5
Questa è la risposta corretta Grazie, le doppie virgolette vuote sono esattamente ciò di cui avevo bisogno.
Richard,

Ho uno script di backup che eseguo settimanalmente e lo modificherei leggermente ogni settimana, provando a farlo a) chiudere il mio programma, b) fare il backup dei miei dati ec) riavviare il programma e chiudere il prompt dei comandi. Questo ha finalmente chiuso il prompt dei comandi (ha anche impedito l'attivazione del mio backup successivo, ho dovuto chiudere quel prompt dei comandi !!!).
NobleUplift,

@NobleUplift: Per me ha funzionato, .. di seguito è riportata la riga esatta, Inizia "" "C: \ Programmi (x86) \ JetBrains \ IntelliJ IDEA 2016.2.5 \ bin \ idea64.exe" &
Xinus

53

Guarda il comando START, puoi farlo:

START rest-of-your-program-name

Ad esempio, questo file batch attenderà fino alla chiusura del blocco note:

@echo off
notepad c:\test.txt

Tuttavia, questo non:

@echo off
start notepad c:\test.txt

31

Dalla mia stessa domanda :

start /b myProgram.exe params...

funziona se si avvia il programma da una sessione DOS esistente.

Altrimenti, chiama uno script vb

wscript.exe invis.vbs myProgram.exe %*

Il metodo Run () di Windows Script Host accetta:

  • intWindowStyle: 0 significa "finestre invisibili"
  • bWaitOnReturn: false significa che il primo script non deve attendere il completamento del secondo script

Ecco invis.vbs:

set args = WScript.Arguments
num = args.Count

if num = 0 then
    WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
    WScript.Quit 1
end if

sargs = ""
if num > 1 then
    sargs = " "
    for k = 1 to num - 1
        anArg = args.Item(k)
        sargs = sargs & anArg & " "
    next
end if

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False

1
+1 Deve esserci un modo più semplice, ma questa è l'unica risposta che ha funzionato per me.
DN

Grazie - quella bandiera / b era esattamente quello che stavo cercando.
ap

21

Questa è l'unica cosa che ha funzionato per me quando ho provato a eseguire una classe Java da un file batch:

start "cmdWindowTitle" /B "javaw" -cp . testprojectpak.MainForm

Puoi personalizzare il startcomando come desideri per il tuo progetto, seguendo la sintassi corretta:

Syntax
      START "title" [/Dpath] [options] "command" [parameters]

Key:
   title      : Text for the CMD window title bar (required)
   path       : Starting directory
   command    : The command, batch file or executable program to run
   parameters : The parameters passed to the command

Options:
   /MIN       : Minimized
   /MAX       : Maximized
   /WAIT      : Start application and wait for it to terminate
   /LOW       : Use IDLE priority class
   /NORMAL    : Use NORMAL priority class
   /HIGH      : Use HIGH priority class
   /REALTIME  : Use REALTIME priority class

   /B         : Start application without creating a new window. In this case
                ^C will be ignored - leaving ^Break as the only way to 
                interrupt the application
   /I         : Ignore any changes to the current environment.

   Options for 16-bit WINDOWS programs only

   /SEPARATE   Start in separate memory space (more robust)
   /SHARED     Start in shared memory space (default)

18

Dovresti provare questo. Avvia il programma senza finestra. In realtà lampeggia per un secondo ma scompare abbastanza rapidamente.

start "name" /B myprogram.exe param1

4
L' "title"opzione è importante. Se il percorso del programma include spazi, deve essere racchiuso tra virgolette, quindi dobbiamo aggiungere "title"per evitare errori.
AD

1
Se chiudi la finestra principale, si chiude anche il processo in background "myprogram.exe".
Aditya Gupta,

14

Come risolvere "problemi di spazio" e dipendenze locali:

@echo off
cd "C:\Program Files\HeidiSQL"
start heidisql.exe

cd "C:\Program Files (x86)\Google\Chrome\Application"
start chrome.exe

exit

Questa non è una risposta alla domanda
jeb

2
vero, ma penso che dia una buona soluzione per risolvere anche altri problemi che ho avuto.
Gilco,

2
È stata la soluzione per me. La finestra Dos si apre ma si chiude di nuovo e la soluzione funziona. Non capisco i voti negativi (ho votato a favore)
JoeFox il

Anche io. la soluzione funziona e risolvi il problema
Gilco,

2

Un sacco di risposte per questa domanda già, ma sto pubblicando questo per chiarire qualcosa di importante, anche se questo potrebbe non essere sempre il caso:

Start "C:\Program Files\someprog.exe"

Potrebbe causare problemi in alcune versioni di Windows poiché in Startrealtà si aspetta che il primo set di virgolette sia un titolo di Windows. Quindi è consigliabile prima citare due volte un commento o un commento vuoto:

Start "" "C:\Program Files\someprog.exe"

o

Start "Window Title" "C:\Program Files\someprog.exe"

0

La mia soluzione per farlo dalla GUI:

  1. Creare un collegamento al programma che si desidera eseguire;

  2. Modifica le proprietà del collegamento;

  3. Cambia il TARGETcampo in %COMSPEC% /C "START "" "PROGRAMNAME"";

  4. Cambia il RUNcampo in minimizzato.

Pronto! Guarda come ti piace ...

PS: i parametri del programma possono essere inseriti tra le due virgolette finali; la PROGRAMNAMEstringa può essere un nome file, un percorso relativo o assoluto: se si inserisce un percorso assoluto e si cancella la lettera di unità e il punto e virgola, questo funzionerà in una chiavetta indipendentemente dalla lettera assegnata dal computer host. (inoltre, se si inserisce il collegamento nella stessa cartella e si precede il nome del file del programma PROGRAMNAMEcon la %CD%variabile, i percorsi corrisponderanno sempre; lo stesso trucco può essere utilizzato nel START INcampo).


0

Se questo file batch è qualcosa che si desidera eseguire come pianificato o sempre; è possibile utilizzare lo strumento di pianificazione di Windows e non si apre in una finestra all'avvio del file batch.

Per aprire Task Scheduler:

  • Avvia -> Esegui / Cerca -> 'cmd'
  • Digita taskschd.msc-> invio

Dal lato destro, fai clic Create Basic Taske segui i menu.

Spero che questo ti aiuti.


0

Ecco la mia soluzione preferita. È tratto da una risposta a una domanda simile.

Utilizzare uno script VBS per chiamare il file batch:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\path\to\your\batchfile.bat" & Chr(34), 0
Set WshShell = Nothing

Copia le righe sopra in un editor e salva il file con estensione .VBS.

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.