使用Java运行setx命令

3
我将编写一个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\。
请有人在这方面指导我。

你是在说将双反斜杠(\)转换为单反斜杠吗? - Pramod S. Nikam
@NutterzUK 我的意思是之前的路径值替换了我硬编码的字符串 %PATH%。 - Javeria Habib
@Orion...不,我的意思是先前的路径值替换了我硬编码的字符串%PATH%。 - Javeria Habib
1个回答

3

嗯,由于没有负责转换%PATH%的东西,所以它根本没有被转换!

更严重的是,实际上是cmd.exe解释器进行环境变量的转换,而你没有使用它。要使其工作,必须执行以下操作:

  1. convert the environment variable PATH to its value in java code

    String path = System.getenv("PATH");
    
  2. use the converted String in your command

    Process p = rt.exec("setx PATH \"" + path + ";" + folderPath + "\"");
    

编辑:

为了确保发生了什么,您可以在执行命令之前显示生成的命令:

String cmd = "setx PATH \"" + path + ";" + folderPath + "\"";
Process p = rt.exec(cmd);

我也做了同样的事情...甚至已经调试过了,但最终结果是,它会将原始路径开头的一部分附加到文件夹路径上。 - Javeria Habib
getenv 正在返回 PATH 变量 3 次。 - Javeria Habib
@JaveriaHabib 我更新了我的回答,以确保所执行的命令。但请注意:setx 修改未来的Windows命令环境,而不是当前的环境。查看 setx /? 应该会显示类似于这样的内容:在本地系统中,由此工具创建或更改的变量将在未来的命令窗口中使用,但不在当前的CMD.EXE窗口中使用(翻译为我的,我的系统是法语 :-)) - Serge Ballesta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接