包含Windows CMD中的PATH的Eval脚本

时间:2017-05-11 12:13:35

标签: windows cmd

我需要评估某些命令所引发的命令&minfuift oc-env'其中有 PATH

但是,它似乎覆盖了整个 PATH 变量。

C:\Users\budhram>echo %PATH%
C:\Program Files\Docker\Docker\Resources\bin;C:\Users\budhram\AppData\Local\Temp;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;.....

C:\Users\budhram>minishift oc-env
SET PATH=C:\Users\budhram\.minishift\cache\oc\v1.5.0;%PATH%;
REM Run this command to configure your shell:
REM     @FOR /f "tokens=*" %i IN ('minishift oc-env') DO @%i

C:\Users\budhram>SET PATH=C:\Users\budhram\.minishift\cache\oc\v1.5.0;%PATH%;

C:\Users\budhram>echo %PATH%
C:\Users\budhram\.minishift\cache\oc\v1.5.0;C:\Program Files\Docker\Docker\Resources\bin;C:\Users\budhram\AppData\Local\Temp;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;....

C:\Users\budhram>@FOR /f "tokens=*" %i IN ('minishift oc-env') DO @%i

C:\Users\budhram>echo %PATH%
C:\Users\budhram\.minishift\cache\oc\v1.5.0;%PATH%;

知道我们该怎么做吗? 这个答案https://stackoverflow.com/a/9370376/1120530也建议使用setlocal enableDelayedExpansion,这似乎在我的案例中不起作用。

1 个答案:

答案 0 :(得分:1)

运行时

@FOR /f "tokens=*" %i IN ('minishift oc-env') DO @%i

do子句将执行

SET PATH=C:\Users\budhram\.minishift\cache\oc\v1.5.0;%PATH%;

这似乎是正确的,但问题是在%i扩展到指定的命令后,没有第二次扩展将%PATH%转换为变量中的值。

您可以尝试使用

@FOR /f "tokens=*" %i IN ('minishift oc-env') DO @call %i

call命令将强制执行第二个解析阶段,以扩展%PATH%引用。