View Full Version : [batch]non fare apparire la shell
nuovoUtente86
02-06-2008, 17:40
Come fare per non fare apparire la shell quando si lancia un file .bat?
temo che non si possa; se è proprio essenziale credo dovresti lanciarlo da un tuo eseguibile che consuma automaticamente l'output prodotto da cmd.exe rediretto su una pipe.
nuovoUtente86
02-06-2008, 18:22
si in VB lo so fare...ma cercavo qualcosa da inserire direttamente nel .bat in modo da non far comparire la shell per i lanci manuale a da java. In java come potrei farlo?
DanieleC88
02-06-2008, 22:52
Non basta mettere un
@ECHO OFF
in testa al file batch?
Così evita che si vedano i comandi ma non che si apra la shell.
Tra l'altro, se c'è output dei suoi comandi, si vedrà comunque.
Secondo me non c'è modo di "nascondere" la shell se non creando un eseguibile.
Come fare per non fare apparire la shell quando si lancia un file .bat?
Non mi risulta sia possibile, a meno che non sia cambiato qualcosa ultimamente.
Soluzioni alternative
- Invece che far partire direttamente il file .bat fanne un link, e imposta il link affinche parta minimizzato. Se inoltre il file bat si con clude con l'esecuzione di un programma, e non ne devi attendere il ritorno, usando start puoi far terminare il bat prima del programma vero e proprio. Non e' una bella soluzione, ma minimizzi il tempo che il file .bat appare sulla barra in basso
- Usi un vbs invece che un bat.
- Usi qualche tool che faccia proprio questo. Se cerchi con google ne trovi.
DanieleC88
03-06-2008, 00:18
Così evita che si vedano i comandi ma non che si apra la shell.
Tra l'altro, se c'è output dei suoi comandi, si vedrà comunque.
Secondo me non c'è modo di "nascondere" la shell se non creando un eseguibile.
Questo sì, ma non so perché mi ricordavo che una cosa del genere potesse funzionare.
[EDIT...]
Se devi eseguire del codice java potresti utilizzare JAVAW
The javaw command is identical to java, except that with javaw there is no associated console window. Use javaw when you don't want a command prompt window to appear. The javaw launcher will, however, display a dialog box with error information if a launch fails for some reason.
oppure prova a reindirizzare a >NUL
nuovoUtente86
03-06-2008, 01:00
Se devi eseguire del codice java potresti utilizzare JAVAW
oppure prova a reindirizzare a >NUL
intendevo lanciare un bat da un' applicazione java senza che la shell apparisse.
prova a reindirizzare a >NUL
in che modo esattamente?
intendevo lanciare un bat da un' applicazione java senza che la shell apparisse.
in che modo esattamente?
non ho mai provato, e non so se funziona.se in ogni comando del file bat, metti >NUL dovrebbe reindirizzare l'output e quindi non avendo output sulla console, questa non dovrebbe apparire.
Oppure un altro metodo è passare tutti i comandi dentro java.Invece di lanciare il bat, lanci i vari comandi
banryu79
03-06-2008, 15:01
Bhe, a dire il vero, nel progetto (Java) su cui sto lavorando per lanciare un paio di exe esterni usiamo un file .bat che lanciamo da codice java con la solita classe Process... ti allego uno spezzone di codice:
String[] args = {"nest.bat"};
String osName = System.getProperty("os.name");
String[] cmd = new String[3];
if (osName.equals("Windows 95"))
{
cmd[0] = "command.com";
cmd[1] = "/C";
cmd[2] = args[0];
}
else
{
cmd[0] = "cmd.exe";
cmd[1] = "/C";
cmd[2] = args[0];
}
System.out.println("Sistema Operativo: " + osName);
System.out.println("Execting " + cmd[0] + " " + cmd[1] + " " + cmd[2] + "...");
Process p0 = Runtime.getRuntime().exec(cmd);
// svuotamento buffer del processo...
StreamGlobber errorGlobber = new StreamGlobber(p0.getErrorStream(), "ERROR");
StreamGlobber outputGlobber = new StreamGlobber(p0.getInputStream(), "OUTPUT");
errorGlobber.start();
outputGlobber.start();
la classica StreamGlobber
/**
* classe utility che esegue lo svuotamento del buffer dello stream passato
* in ingresso.
* Utile per svuotare l'output & error stream della shell di Windows
* (cmd.exe) utilizzata per il lancio di processi esterni.
*/
class StreamGlobber extends Thread
{
InputStream is;
String type;
public StreamGlobber(InputStream is, String type)
{
this.is = is;
this.type = type;
}
@Override
public void run()
{
try
{
BufferedReader br = new BufferedReader( new InputStreamReader(is));
String line = null;
while ((line = br.readLine()) != null)
{
System.out.println(type + ">" + line);
}
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}
Ah, nel .bat il primo comando è @ECHO OFF, ma non penso sia quello che evita l'apertura della shell, penso sia più importante l'uso della classe StreamGlobber che consuma ogni eventuale output (std & error); deve essere quello che evita l'apertura della shell.
banryu79
04-06-2008, 09:50
@UP:
In ogni caso ho trovato questo programma di utility sul web che sembra fare al caso tuo: Invoke.
> pagina spiegazioni (http://www.beyondflash.com/content/ch04.htm)
> pagina Invoke + download (http://www.extendingflash.com/utilities/invoke.html)
Ciao :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.