使用Java运行setx命令
使用Java运行setx命令
我正在编写一段Java代码,它将使用Java将路径字符串附加到%PATH%变量中。
在命令提示符中,命令是
setx PATH "%PATH%;C:\my Path\"
在Java中,这是我的代码:
import java.io.File; import java.io.IOException; public class AddToPATHVariable { public static void main(String[] args) throws InterruptedException, IOException { String folderPath = "C:\\my Path\\"; System.out.println(folderPath); Runtime rt = Runtime.getRuntime() ; Process p = rt.exec("setx PATH \"%PATH%;" + folderPath + "\""); p.waitFor(); p.destroy(); } }
问题是我的命令行提示符完美地附加了新的字符串。但是Java代码使路径变量的值为%PATH%;C:\my Path\
请有人在这方面指导我。
问题原因:
问题是由于在Java代码中使用rt.exec("setx PATH \"" + path + ";" + folderPath + "\"")
命令时,没有正确转换环境变量%PATH%
。实际上,cmd.exe
解释器负责转换环境变量,但在这种情况下没有使用它。
解决方法:
要解决这个问题,需要进行以下步骤:
1. 在Java代码中将环境变量PATH
转换为其值:
String path = System.getenv("PATH");
2. 在命令中使用转换后的字符串:
Process p = rt.exec("setx PATH \"" + path + ";" + folderPath + "\"");
编辑:
为了确保发生了什么,可以在执行之前显示生成的命令:
String cmd = "setx PATH \"" + path + ";" + folderPath + "\""; Process p = rt.exec(cmd);
我也遇到了同样的问题,并进行了调试,但最终结果是,它附加了原始路径开头的一部分而不是文件夹路径。
getenv
返回了3次PATH
变量。
我更新了我的答案以确保执行的命令。但要注意:setx
会修改未来的Windows命令环境,而不是当前的命令窗口。查看setx /?
应该会显示类似于:在本地系统中,由此工具创建或更改的变量将被未来的命令窗口使用,但不会在当前的CMD.EXE窗口使用(这是我的翻译,我的系统是法语)。