【问题标题】:How change PATH env in cmd.exe /c in Windows如何在 Windows 中更改 cmd.exe /c 中的 PATH 环境
【发布时间】:2016-12-29 10:33:33
【问题描述】:

我想运行这样的东西:

cmd /c "set ""Path=V:\;%Path%"" & ECHO. %Path% & PAUSE"

但是有一个问题:命令行窗口只出现片刻,然后就消失了。我创建了一个测试 .bat(如 echo.1: %1 和 2,3...)来检查它的行为方式和...

0: "V:\test.bat"
1: /c
2: "set ""Path=V:\;
3: 
(4-9 the same)

当我用例如 5 替换 % 时,第二个参数看起来像 "set ""Path=V:\;5Path5"" & ECHO. 5Path5 & PAUSE",但这不是我想要的。 我认为,在这个 shell 命令中解析 %Path% 可能有问题。

我也试过了:

cmd /c "set ""Path=V:\;%%Path%%"" & ECHO. %%Path%% & PAUSE"
cmd /c "set ""Path=V:\;%%%Path%%%"" & ECHO. %%%Path%%% & PAUSE"
cmd /c "set ""Path=V:\;%%%%Path%%%%"" & ECHO. %%%%Path%%%% & PAUSE"
cmd /c "set ""Path=V:\;%%%%%Path%%%%%"" & ECHO. %%Path%%%%% & PAUSE"
cmd /c "set ""Path=V:\;%%%%%%%%Path%%%%%%%%"" & ECHO. %%%%%%%%Path%%%%%%%% & PAUSE"
cmd /c "set ""Path=V:\;^%Path^%"" &ECHO.^%Path^%&PAUSE"
cmd /c "set ""Path=V:\;^%%Path^%%"" &ECHO.^%Path^%&PAUSE"
cmd /c "set ""Path=V:\;\%Path\%"" &ECHO.\%Path\%&PAUSE"

我将在下次测试期间编辑帖子...

编辑: 我只是注意到我什至不能简单地使用:cmd /c "echo %PATH% & PAUSE"

【问题讨论】:

  • 经过进一步测试,我怀疑问题是我无法在命令行窗口之外传递包含%path%(和%windir% 和其他一些,不是所有环境变量)的字符串。

标签: windows batch-file cmd path environment-variables


【解决方案1】:

我来解决。我需要什么:

cmd /c "set ""Path=V:\;%Path:~0%"" &ECHO.%Path:~0%&PAUSE"

看起来 Windows 用这个环境变量内容替换了%PATH%(更多路径用分号),即使在 Run (Win+R)、CMD (.exe)、ShellExec (wscript/winapi) 中也是如此。所以它不能用作快捷方式中参数的一部分(我需要)。

【讨论】:

    【解决方案2】:

    这似乎不起作用,因为 xx 在 cmd 启动之前被评估

    cmd /c "set xx=yyyyyy & echo %xx% & PAUSE"
    

    这证明它有效,变量设置正确:

    cmd /c "set xx=yyyyyy & set xx & PAUSE"
    

    输出:

    xx=yyyyyy
    

    转义%的其他方式:

    cmd /c "set xx=yyyyyy & ECHOxx.bat & PAUSE"
    

    ECHOxx.bat 是一个执行echo %xx% 的脚本)

    输出

    yyyyyy
    

    对于路径,您自己注意到它有点复杂,但它也可以正常工作:

    cmd /c "set PATH=%CD%\subdir;"%PATH%" & echoxx.bat"
    

    有效:echoxx.bat 已移动到 subdir 目录中,并且找到了。

    【讨论】:

    • 问题出在其他地方...看起来我不能使用%PATH% 字符串作为传递给cmd /c 的参数的一部分。
    • 我刚刚想通了。
    • 我仍然不能那样使用更改路径(我已经尝试过cmd /c "set Path=V:\;%Path% &ECHO.%Path%&PAUSE"),因为它不能让我使用%PATH%
    • Aslo,在这种情况下,%PATH% 必须用引号引起来,因为它包含带空格的路径。
    • echo %PATH% 仍将显示旧路径,因为它是在 CMD 启动之前评估的,但我的最后一次编辑证明路径实际上已更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2021-05-06
    • 2011-04-19
    • 2018-02-09
    • 2015-01-21
    • 1970-01-01
    • 2015-01-15
    相关资源
    最近更新 更多