2009-06-15 5 views
4

Ich führe eine Batch-Datei mit Java-Code. Der Code ist unten angegeben:Runtime.getRuntime(). Exec(), verstecken Sie die Konsole Bildschirm

Process proc = null; 

proc = Runtime.getRuntime().exec("cmd /c start somebat.bat"); 

Damit wird die normale Eingabeaufforderung geöffnet. Jetzt möchte ich das Eingabeaufforderungsfenster (das schwarze Fenster) unterdrücken/verstecken. Ich habe irgendwo gefunden, dass, wenn ich das Startattribut aus dem Befehl entferne, es nicht erscheint, aber wenn es aus dem Befehl entfernt wird, wird der Befehl nicht ausgeführt und es werden auch keine Ausnahmen angezeigt.

Kann mir irgendjemand sagen, wie man dieses Fenster unterdrückt?

+0

Fügen Sie am Ende des Batch-Skripts einen Exit hinzu. –

Antwort

-2

Ich kenne Windows nicht sehr gut, aber ich schlage vor, dass Sie das "cmd" -Bit des Befehls weglassen. cmd.exe ist das Windows-Terminal. Nur eine Vermutung. Schauen Sie sich die anderen exec() -Methoden an, es gibt eine, die den ausführbaren Befehl ausführt, und die Argumente. Unter UNIX können Sie normalerweise nichts tun, was eine Shell nicht unterstützt (wie die Ausgabe in eine Datei zu leiten), da dies Shell-Funktionen sind und nicht vom aufgerufenen Programm ausgeführt werden. Könnte sein, warum Sie feststellen, wenn Sie das Cmd-Präfix entfernen, funktionieren einige Dinge nicht. nur

versuchen:

Process proc = Runtime.getRuntime().exec("somebat.bat");

+1

Hallo, Die angegebene Option funktioniert nicht. Die Bat-Datei wird nicht ausgeführt. –

+0

Haben Sie versucht, den vollständigen Pfad anzugeben? – gubby

+0

Ja, ich habe versucht, aber die Batch-Datei wurde nicht ausgeführt. –

1

hinzufügen /Q

Runtime.getRuntime().exec("cmd /c /Q start somebat.bat"); 
+0

Hallo Jitter, /Q-Option funktioniert nicht. Der Befehl wird nicht ausgeführt, wenn ich hinzufügen/Q :-( –

0

Haben Sie versucht

start /min "title" "c:\path\batchfile.bat" 

Dies wird Ihre Batch-Datei, ohne das Fenster laufen. Es wird jedoch immer noch in der Taskleiste angezeigt (da es minimiert ist)

+0

Hallo Brian, Ich muss den Eingabeaufforderungsbildschirm vollständig ausblenden. Diese Option minimiert nur das Fenster. –

5

Haben Sie die B-Option "Start" probiert?

proc = Runtime.getRuntime().exec("cmd /c start /B somebat.bat"); 

Edit:
Ok, Anish, das ist lustig, dass der Code nicht ausgeführt wird.
ich einen Unit-Test-up:

Process proc = null; 
    try 
    { 
     proc = Runtime.getRuntime().exec("cmd /c start /B D:\\temp\\_test\\somebat.bat"); 
     proc = Runtime.getRuntime().exec("cmd /c call D:\\temp\\_test\\somebat.bat"); 
     proc = Runtime.getRuntime().exec("D:\\temp\\_test\\somebat.bat"); 
    } 
    catch (IOException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Meine somebat.bat Datei sieht wie folgt aus:

rem somebat.bat: 
d: 
cd D:\temp\_test 
copy somebat.bat somebat2.bat 

Alle drei Versionen im try-Block über Arbeit in meinem Szenario. Somebat.bat wird in somebat2.bat kopiert, ohne dass ein Befehlsfenster erscheint (was passiert, wenn ich Ihren Anruf verwende, der in Ihrer Frage angezeigt wird).

Edit 2: Nächste Runde ;-)
Anish, können Sie zeigen uns, wie Ihre somebat.bat und Ihre ant-Datei aussehen?
Da alle drei Anrufe unter der Arbeit in meinem Szenario:

Testcode:

Process proc = null; 
proc = Runtime.getRuntime().exec("cmd /c start /B c:\\temp\\_test\\somebat.bat"); 
proc = Runtime.getRuntime().exec("cmd /c call c:\\temp\\_test\\somebat.bat"); 
proc = Runtime.getRuntime().exec("c:\\temp\\_test\\somebat.bat"); 

somebat.Schläger:

cd\temp\_test 
ant mycopy 

build.xml:

<?xml version="1.0"?> 
<project name="testproj" default="mycopy" basedir="."> 
    <target name="mycopy"> 
     <copy file="myfile.txt" tofile="mycopy.txt" /> 
    </target> 
</project> 

myfile.txt: beliebige Textdatei

+0

Hallo John Nopes/B löst auch nicht mein Problem. Die Charge Datei wird nicht ausgeführt. –

+0

Tatsächlich wird ein ant-Befehl in meiner Batch-Datei ausgeführt. Er wird nur mit folgendem Aufruf ausgeführt. Mit anderen Optionen wird er nie ausgeführt. "cmd/c start D: \\ temp \\ _ test \\ somebat.bat " –

+1

Wenn Sie nur einen ant -Befehl ausführen, können Sie dies auch direkt von Java aus tun: Alle Ant-Tasks können als Klassen aufgerufen und einfach ausgeführt werden (bei richtiger Konfiguration) und Ant selbst kann auch aufgerufen werden innerhalb von Java (siehe zum Beispiel: http://www.ibm.com/developerworks/websphere/library/techarticles/0502_gawor/0502 _gaword.html) –

0

die Sie interessieren.

Runtime.getRuntime() exec (cmd. exe /KC:/path/batchfile.bat);

2
Process proc = null; 
proc = Runtime.getRuntime().exec("cmd /c start C:\temp\somebat.bat"); 
+0

bitte geben Sie Antwort im richtigen Format http://stackoverflow.com/editing-help#syntax-highlighting –

0

Sie können "run" anstelle von "Start" verwenden.

Runtime.getRuntime().exec("cmd /c run somebat.bat");