2010-10-21 82 views
0

步驟,使用運行時API環境變量的問題用java

  1. echo %PATH%(輸出將會像"c:\windows\system32;d:\test"
  2. 執行ping或任何系統命令,輸出將是成功
  3. 刪除一個值用於路徑像d:\test
  4. echo %PATH%(輸出將是"%system32%\system32;"
  5. 現在如果我執行第2步中執行的相同命令,如ping,然後得到「未找到命令」。

Plesae注: - 在相同的java程序執行的所有步驟

有人建議什麼在這個過程中

+0

步驟2中使用的命令是什麼? – 2010-10-21 11:27:18

+0

類似ipconfig的命令,ping – 2010-10-21 11:29:11

+1

@ user482914 - java在哪裏?顯示你的代碼會很有幫助。 – 2010-10-21 11:31:32

回答

1

看起來變量去錯了沒有被展開時顯示PATH第二次(第4步)。在步驟3中刪除一個值時,可能會損壞路徑。

向我們顯示一個代碼片段,演示此問題。

1

您是否正在使用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")年代以前清理道路。

1

你的問題我不清楚,但我確實看到了一些問題:

%System32下%通常爲c:\ Windows \ System32下

在您的例子,假設環境設置正確的%SYSTEM32%,步驟(4) 「%SYSTEM32%\ SYSTEM32;」 的意願。解析爲c:\ windows \ system32 \ system32

哪可能不是你想要的。