2017-05-11 54 views
-1

我需要評估某些命令'minishift oc-env'所拋出的命令,該命令中有PATH在Windows中包含PATH的評估腳本CMD

但是,它似乎是覆蓋整個變量的整個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

當您運行

@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%參考嘗試。

+0

太棒了!工作順利。謝謝 :) – ram