步驟,使用運行時API環境變量的問題用java
echo %PATH%
(輸出將會像"c:\windows\system32;d:\test"
)- 執行
ping
或任何系統命令,輸出將是成功 - 刪除一個值用於路徑像
d:\test
echo %PATH%
(輸出將是"%system32%\system32;"
)- 現在如果我執行第2步中執行的相同命令,如
ping
,然後得到「未找到命令」。
Plesae注: - 在相同的java程序執行的所有步驟
有人建議什麼在這個過程中
步驟,使用運行時API環境變量的問題用java
echo %PATH%
(輸出將會像"c:\windows\system32;d:\test"
)ping
或任何系統命令,輸出將是成功d:\test
echo %PATH%
(輸出將是"%system32%\system32;"
)ping
,然後得到「未找到命令」。Plesae注: - 在相同的java程序執行的所有步驟
有人建議什麼在這個過程中
看起來變量去錯了沒有被展開時顯示PATH第二次(第4步)。在步驟3中刪除一個值時,可能會損壞路徑。
向我們顯示一個代碼片段,演示此問題。
您是否正在使用ProcessBuilder進行此操作?這允許簡單訪問傳遞給子流程的環境變量。聽起來你正在嘗試修改全球環境,這可能不是你想要做的。
下面是一個例子:
ProcessBuilder pb = new ProcessBuilder();
Map<String, String> env = pb.environment();
System.out.println("Current environment: " + env.toString());
String path = env.get("PATH");
path = path.substring(0, path.indexOf("d:\\test")) + path.substring(path.indexOf("d:\\test") + "d:\\test".length());
env.put("PATH", path);
pb.command("ping");
Process p = pb.start();
// ...
因爲它聽起來像你使用的是Windows,你需要有點更加謹慎地發現環境的路徑變量,因爲Windows環境病例不區分大小寫,但Map.get()
區分大小寫。可能最好循環通過尋找equalsIgnoreCase("PATH")
的鑰匙。
此外,您可能希望把它放回地圖(確保它不包含額外System.getProperty("path.separator")
年代以前清理道路。
你的問題我不清楚,但我確實看到了一些問題:
%System32下%通常爲c:\ Windows \ System32下
在您的例子,假設環境設置正確的%SYSTEM32%,步驟(4) 「%SYSTEM32%\ SYSTEM32;」 的意願。解析爲c:\ windows \ system32 \ system32
哪可能不是你想要的。
步驟2中使用的命令是什麼? – 2010-10-21 11:27:18
類似ipconfig的命令,ping – 2010-10-21 11:29:11
@ user482914 - java在哪裏?顯示你的代碼會很有幫助。 – 2010-10-21 11:31:32