Come faccio a creare un file batch di Windows che non mostra il prompt dei comandi quando eseguito? [duplicare]


58

Ho installato un gioiello rubino chiamato Redcar, che viene lanciato dalla riga di comando. Quando viene eseguito, ruba la shell fino a quando non termina, quindi devo creare una nuova finestra della shell per continuare a lavorare sulla riga di comando. La shell che sto usando è la shell GITBash di MySysGit.

Ho trovato un file Redcar.bat che ha lo scopo di avviare Redcar come collegamento, presumo, ma non voglio che la finestra del prompt dei comandi extra si apra ogni volta che lancio il file BAT.

Come posso semplicemente eseguire la BAT senza vedere il prompt?


1
Vorrei sapere la risposta a questo +1 per una buona domanda.
Supercereal

@Kyle una domanda simile è stata posta prima che superuser.com/questions/191149/how-to-execute-cmd-exe- menzioni silenziosamente HSTART e menzioni brevemente che anche un file VBS può
avviarlo

Puoi aggiornare la risposta selezionata? È possibile e molto semplice quando sai come .. file batch: riga 1: set var1=hello.txtriga 2:start "test" notepad.exe "%~dp0%var1%"
Kody Brown

Basta usare ::o @REM. Fonte: superuser.com/a/843754/101936
PHPst

Risposte:


38

Non è possibile: l'esecuzione di un file batch con il prompt dei comandi integrato manterrà una finestra aperta fino alla chiusura del file batch.

Quello che puoi fare è prendere delle misure per assicurarti che il file batch esca il più rapidamente possibile. Se possibile, modificare il file batch per eseguire qualsiasi programma con il startcomando. Per impostazione predefinita, startrestituisce immediatamente senza attendere la chiusura del programma, quindi il file batch continuerà a essere eseguito e, presumibilmente, uscirà immediatamente. Abbinalo alla modifica del collegamento per eseguire il file batch minimizzato e vedrai la barra delle applicazioni lampeggiare senza nemmeno vedere una finestra sullo schermo.

Un avvertimento a questo è che se stai eseguendo un programma in modalità console, come molti interpreti di script, il file batch attenderà la startchiusura del programma e l'utilizzo genererà una nuova finestra della console. Quello che devi fare in questo caso è eseguire la versione dell'interprete basata su Windows anziché quella basata sulla console - non è startnecessario. Per Perl, dovresti correre wperl.exeinvece di perl.exe. Per Python, è pythonw.exeinvece di python.exe. La vecchia distribuzione di Win32 Ruby che ho scaricato ha rubyw.exe, che dovrebbe fare la stessa cosa.

Un'ultima possibilità è quella di utilizzare uno strumento di terze parti per eseguire il prompt dei comandi con una finestra nascosta. Ho sentito parlare di queste cose ma non ne ho mai avuto un uso, quindi non so nulla di particolare su cui indicarti.


Grazie che risponde alla mia domanda. Ciò che era veramente fastidioso non era che apparisse la finestra del prompt ma che dovesse rimanere aperta finché il programma era in esecuzione. Ora il flash è totalmente sopportabile e non altrettanto fastidioso. Verificherà se posso modificare lo script per eseguire rubyw anziché ruby.
Jake,

1
Mille grazie per aver spiegato la differenza tra "python" qualsiasi "pythonw" - finalmente ho trovato la soluzione per eseguire gli strumenti della finestra di Python che abbiamo senza il prompt dei comandi in background.
FP

´java.exe´ e ´javaw.exe´ sono uguali.
redbeam_25

Puoi - semplicemente non nel codice batch stesso. davvero ci sono un certo numero di domande qui su Come nascondere il prompt dei comandi superuser.com/questions/62525/… superuser.com/questions/191149/how-to-execute-cmd-exe-silently
barlop

21

Penso che questa sia la soluzione più semplice e più breve per eseguire un file batch senza aprire la finestra DOS, può essere molto fonte di distrazione quando si desidera pianificare l'esecuzione periodica di una serie di comandi, quindi la finestra DOS continua ad apparire, ecco la soluzione . Utilizzare uno script VB per chiamare il file batch ...

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0 
Set WshShell = Nothing 

Copia le righe sopra in un editor e salva il file con estensione .VBS. Modificare il nome e il percorso del file .BAT di conseguenza. Quindi esegui il file .vbs e la magia accade!


8

È possibile eseguire un altro file batch con START / MIN CMD.EXE / C mybatchfile.bat dal prompt dei comandi.

Dall'esterno verrà visualizzata la finestra della console cmd, ma per evitarlo, è possibile creare un file di collegamento con proprietà modificate per iniziare a ridurre al minimo .


2
In Windows 8.1, questa opzione è in Proprietà -> scheda Collegamento -> Esegui: -> Ridotta a icona (l'impostazione predefinita è "Finestra normale")
pix,

5

Per fare ciò, utilizzare il programma Bat To Exe Converter per convertire il file batch in un file eseguibile.

Durante la conversione in un eseguibile, troverai un'opzione per eseguire il tuo file come applicazione invisibile nella sezione visibilità. Pertanto, quando lo esegui, verrà eseguito senza una finestra.

Bat per exe


Il sito web richiede che il tuo computer "risolva" il criptaggio captcha. Ecco il programma nofile.io/f/q4o8dauVQ4P/Bat_To_Exe_Converter.zip
rluks

4

Continuando sulla risposta di Dennis Williamson, è possibile modificare il file batch e aggiungere (anteporre) START /Bal comando che si sta eseguendo.

Ad esempio, ho un file batch che esegue putty e ha avuto lo stesso problema (CMD extra), quindi è così che l'ho scritto:

@ECHO OFF
START / B putty.exe -load name_of_my_config_file

Ha funzionato perfettamente.


4

Prova questo:

START /B batchfile

nota aggiunta da barlop

inizio /? dice di / B

 B           Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application.

3
Ciò potrebbe funzionare se ho un prompt dei comandi aperto, ma quando sto usando il .bat faccio doppio clic su di esso o un collegamento sul desktop. Sto cercando di evitare di dover avere un prompt dei comandi per avviare questo programma.
Jake,

3

Non sono chiaro sul tuo problema, ma con alcuni dei miei file batch, utilizzo un "dumy" il cui unico scopo è quello di avviare il file batch principale.

Quindi GO.BAT avrà:

cmd /c go2.bat %1 %2 %3
exit

L'uscita chiude la finestra del prompt dei comandi che altrimenti rimarrebbe aperta.

E GO2.BAT avrà effettivamente il contenuto del file batch che desidero.

  @echo off
  set userid=

  if NOT [%1]==[] goto userid:
  set /p userid=Enter USERID:  
  goto set_usr:

 :userid
 set userid=%1
 shift

 :set_usr
 if %userid%==steven goto steven:
 ...


1

Se sei ancora interessato a non mostrare affatto la finestra della console, ecco una soluzione di StackOverflow che ha funzionato per me (nel mio caso non ho inserito nulla nel registro, ma dove ne avevo bisogno).


0

Basta posizionare l'opzione / b davanti al percorso. Non aprirà il secondo prompt dei comandi.


0

Finora la risposta di Indago è stata la soluzione migliore per me. Il file VBS mi consente di eseguire la funzionalità del batch tramite lo script, evitando in primo luogo la finestra CMD. Ci sono alcuni avvertimenti però:

  1. Se il batch richiede i diritti di amministratore, creare o utilizzare un batch esistente che chiama VBS ed eseguirlo come amministratore.

  2. Senza alcuna visibilità, può essere difficile discernere se ciò che stai cercando di fare è effettivamente correre nel modo desiderato.

Detto questo, metterei un piccolo finto setup / test unitario per assicurarmi che funzioni esattamente nel modo desiderato, prima di integrarlo.


0

Ho usato cmdow in passato e sembra aver funzionato per quello che voglio.

Probabilmente vorrai utilizzare una delle seguenti opzioni: CMDOW [window] /HID

/HID nasconde la finestra specificata

CMDOW [window] /END

/END chiude la finestra specificata

CMDOW [window] /CLS

/CLS educatamente chiesto di chiudere la finestra (alcune finestre potrebbero aprire una finestra di dialogo)

Spero che sia di aiuto.


-5

Basta fare un collegamento al file batch, fare clic destro su di esso, fare clic su Properties, vai alla Generalscheda, selezionare la casella chiamata Hidden, fare clic su Applye quindi su OK.
Ora aprendo il collegamento verrà eseguito il file batch nascosto.


Questo è sbagliato, in quanto nasconde semplicemente il file di scelta rapida / batch mentre ciò che l'utente desidera è un file batch da eseguire in modo invisibile.
Non fare il root qui per ...
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.