使用Java运行setx命令

16 浏览
0 Comments

使用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\

请有人在这方面指导我。

0
0 Comments

问题原因:

问题是由于在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窗口使用(这是我的翻译,我的系统是法语)。

0