2011-01-14 18:23:22 +0000 2011-01-14 18:23:22 +0000
59
59

Come faccio a creare un file Batch di Windows che non mostra il prompt dei comandi quando viene eseguito?

Ho installato una gemma di rubino chiamata Redcar, che viene lanciata dalla riga di comando. Quando viene eseguito, ruba la shell fino a quando non termina, quindi devo creare una nuova finestra di shell per continuare a fare il lavoro da riga di comando. La shell che sto usando è la shell GITBash di MySysGit.

Ho trovato un file Redcar.bat che dovrebbe lanciare Redcar come scorciatoia, presumo, ma non voglio che la finestra extra del prompt dei comandi si apra ogni volta che lancio il file BAT.

Come faccio ad eseguire il BAT senza vedere il prompt?

Risposte (11)

38
38
38
2011-01-21 18:41:45 +0000

Non è possibile – l'esecuzione di un file batch con il Prompt dei comandi integrato manterrà aperta una finestra fino all'uscita del file batch.

Quello che si può fare è fare in modo che il file batch esca il più rapidamente possibile. Se possibile, modificare il file batch per eseguire qualsiasi programma con il comando start. Per impostazione predefinita, start ritorna immediatamente senza attendere l'uscita del programma, quindi il file batch continuerà ad essere eseguito e, presumibilmente, uscirà immediatamente. Accoppiate questo con la modifica della scorciatoia per eseguire il file batch ridotto al minimo, e vedrete solo la barra delle applicazioni lampeggiare senza nemmeno vedere una finestra sullo schermo.

Un avvertimento a questo è che se state eseguendo un programma in modalità console, che molti interpreti di script sono, il file batch aspetterà che il programma esca, e usando start si aprirà una nuova finestra di console. Quello che si deve fare in questo caso è eseguire la versione basata su Windows dell'interprete invece di quella basata su console - non è necessario l'uso di start. Per Perl, si dovrebbe eseguire wperl.exe invece di perl.exe. Per Python, è pythonw.exe invece di python.exe. La vecchia distribuzione win32 Ruby che ho scaricato ha rubyw.exe, che dovrebbe fare la stessa cosa.

Un'ultima possibilità è quella di usare 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 l'uso, quindi non conosco nulla di particolare a cui farvi riferimento.

22
22
22
2014-01-15 06:25:25 +0000

Penso che questa sia la soluzione più semplice e più breve per eseguire un file batch senza aprire la finestra DOS, può essere molto distraente quando si vuole programmare una serie di comandi da eseguire periodicamente, quindi la finestra DOS continua a spuntare, ecco la vostra soluzione. Usare uno Script VB per richiamare il file batch …

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

Copiare le righe di cui sopra in un editor e salvare il file con estensione .VBS. Modificare il nome del file .BAT e il percorso di conseguenza. Poi basta eseguire il file .vbs e la magia accade!

8
8
8
2013-01-02 05:37:05 +0000

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

Dall'esterno porterà la finestra della console cmd ma per evitare questo, è possibile creare un file di scorciatoia con proprietà modificate per avviare minimizzato.

5
5
5
2016-09-11 08:06:00 +0000

Per fare questo, usare il programma Bat To Exe Converter per convertire il file batch in un file eseguibile.

Quando si converte in un eseguibile, si trova un'opzione per eseguire il file come Applicazione invisibile nella sezione visibilità. Così, quando lo si esegue, esso funzionerà senza finestra.

4
4
4
2012-12-18 07:07:00 +0000

Continuando con la risposta di Dennis Williamson, è possibile modificare il file batch e aggiungere (prependendo) START /B al comando che si sta eseguendo.

Per esempio, ho un file batch che esegue lo stucco e ha 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
4
4
2011-01-14 19:32:24 +0000

Prova questo:

START /B batchfile
``` ```
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.

** nota aggiunta da barlop**

start /? dice di /B

&001

3
3
3
2015-04-25 09:00:42 +0000

Si potrebbe usare RunHiddenConsole

hideExec.bat

@echo off
RunHiddenConsole batch.bat
3
3
3
2011-01-21 18:20:43 +0000

Non mi è chiaro il vostro problema, ma con alcuni dei miei file batch, uso un “dumy” che ha come unico scopo quello di lanciare 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à 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:
 ...
0
0
0
2013-03-04 00:36:09 +0000

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

0
0
0
2014-10-18 16:43:48 +0000

La risposta di Indago è stata finora la soluzione migliore per me. Il file VBS mi permette di eseguire le funzionalità del lotto attraverso lo script, impedendo che la finestra CMD si attivi in primo luogo. Ci sono però alcuni avvertimenti:

  1. Se il vostro batch richiede diritti di amministratore, create o usate un batch esistente che chiami la VBS ed eseguiate quel batch come Amministratore.

  2. Se il vostro batch richiede diritti di amministratore, create o usate un batch esistente che chiami la VBS ed eseguiate quel batch come Amministratore.

  3. Senza visibilita’, puo’ essere difficile capire se cio’ che si sta cercando di fare e’ effettivamente eseguito come si vuole.

Detto questo, metterei prima un piccolo test di set-up/unita’ per assicurarmi che funzioni esattamente come si vuole, prima di integrarlo.

0
0
0
2016-05-20 07:11:31 +0000

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

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

/HID nasconde la finestra specificata

CMDOW [window] /END

/END chiude la finestra specificata

CMDOW [window] /CLS

/CLS chiede gentilmente alla finestra di chiudere (alcune finestre possono aprire una finestra di dialogo)

Spero che questo aiuti.