2016-06-01 3 views
0

zu übergeben. Ich habe die folgenden Probleme.Rufen Sie BAT mit Java auf und speichern Sie die Umgebung (geändert durch die BAT), um die Umgebung an die nächste BAT

Lassen Sie uns ein zwei BAT-Files b1 und b2 genannt haben sagen:

b1 setzt eine ENV: set hello=hello

b2/Druck dieser ENV hallt: echo -- %hello% -- >> C:\Users\Administrator\Desktop\hello.txt

Nun, ich mag zu Rufen Sie b1 und b2 auf, werfen Sie JAVA und lassen Sie b2 hallo basierend auf dem Wert %hello% hallo.

Wenn ich dies tun:

Runtime.getRuntime().exec("cmd /c call C:\\Users\\Administrator\\Desktop\\b1.bat").waitFor(); 
Runtime.getRuntime().exec("cmd /c call C:\\Users\\Administrator\\Desktop\\b2.bat").waitFor(); 

Ich erhalte diese Ausgabe in der hello.txt:

-- -- 

Es scheint, dass die Informationen zwischen den beiden Anrufen verloren. Könnte mir jemand helfen? Danke !!!

+0

eine offensichtliche Art und Weise ist es, die Daten in einer temporären Datei zu schreiben, die von der zweiten Bat-Datei rot. – npocmaka

+0

Führen Sie einfach die beiden Batch-Dateien unter _the same_cmd.exe aus, damit die Umgebung erhalten bleibt: 'Runtime.getRuntime(). Exec (" cmd/c-Aufruf C: \\ Benutzer \\ Administrator \\ Desktop \\ b1.bat & c: \\ Benutzer \\ Administrator \\ Desktop \\ b2.bat "). waitFor();' – Aacini

Antwort

0

Ja, ich habe eine Lösung gefunden. Ich habe eine neue Bat-Datei (b0) erstellt und die anderen aufgerufen. Also dieser Code hilft mir.

b0.bat Code:

call b1.bat 
call b2.bat 

Java-Code:

Runtime.getRuntime().exec("cmd /c call C:\\Users\\Administrator\\Desktop\\b0.bat").waitFor(); 
0

Die Umgebung wird nur vom übergeordneten Prozess zum untergeordneten Prozess geerbt. Also, was auch immer von b1.bat gesetzt wird, geht verloren, wenn b1.bat endet (also wird weder Ihr Java-Prozess noch b2.bat eine durch b1.bat gesetzte Umgebungsvariable sehen). Und natürlich sind diese für keinen anderen Prozess sichtbar, den Ihr Java-Code starten könnte.

Wenn Sie Umgebungsvariablen für Ihre untergeordneten Prozesse festlegen möchten, sollten Sie sie mit ProcessBuilder ausführen (so können Sie bestimmte Umgebungsvariablen festlegen, bevor Sie sie starten).