2016-06-23 52 views
1

這裏的價值來糾正變量lastoccur並且還回蕩cd命令不改變變量值的變化目錄

但cd命令移動到該目錄所做的是貌似不工作。這是爲什麼發生?

@echo off 
mode con: cols=157 lines=2500 
setlocal enabledelayedexpansion 

for /f "tokens=2" %%G in ('p4 client -o 2850NewDev ^| findstr /c:"Root:"') do (
    set lastoccur=%%G 
) 

cd /d !lastoccur! 
echo !lastoccur! 
PAUSE 

更新1

我改變了代碼如下:

@echo off 
mode con: cols=157 lines=2500 
set lastoccur="" 

for /f "tokens=2" %%G in ('p4 client -o 2850NewDev ^| findstr /c:"Root:"') do (
    set lastoccur=%%G 
) 

cd %lastoccur% 
echo %lastoccur% 
PAUSE 

現在還CD不更改目錄。我沒有看到窗口上的任何路徑,只是回顯的值。

+0

這完全取決於'p4 client -o 2850NewDev'的輸出是什麼樣子。 – SomethingDark

+0

@SomethingDark在lastoccur變量中最終設置的值是:c:\ fold1 \ fold2 – Aman

+0

我想要的是設置lastoccur變量中的值並將目錄更改爲循環外的存儲值。 – Aman

回答

0

問題出在線setlocal enabledelayedexpansion

setlocal運行時創建本地會話。你可以把它想象爲一個孩子cmd.exe進程被產生(不是,但它像一個行爲)。在該行之後但在相應的endlocal(如果有)之前執行的所有操作都在其自己的分區環境中完成。

您正在更改新創建的本地環境中的目錄,但全局環境未被更改。

您已經接近第二次嘗試,但不能使用在代碼塊內部創建的變量,而無需延遲展開。你可以,但是,使用for循環變量來做事情。

for /f "tokens=2" %%G in ('p4 client -o 2850NewDev ^| findstr /c:"Root:"') do (
    cd /d %%G 
    echo %%G 
)