2015-04-30 51 views
2

當我運行一個批處理文件,位於C:\some\dir我知道我可以使用%cd%%~dp0獲取批處理文件本身的路徑和其他信息描述here批處理文件得到當前工作目錄後cd命令

但是,在批處理文件執行了幾個cd命令後,我還沒有設法得到「當前工作目錄」。

因此,例如:

  • 批處理文件是C:\some\dir
  • 批處理文件執行cd sub後來cd sub2

我該如何獲得路徑該文件夾

它應該會產生C:\some\dir\sub\sub2,並且在命令行中手動完成上述所有操作時,將等於pwd命令!

我沒有上面的任何命令運氣!它說here%cd%變量應該在使用cd命令後更新,但我總是得到C:\some\dir作爲輸出。

編輯

link to a short version of my batch file

+0

它的工作原理與您所描述的完全一樣,在這裏... – zb226

+1

請閱讀[這裏](http://stackoverflow.com/a/25440709/2861476)。在沒有看到代碼的情況下(如果將它包含在問題中更容易),似乎可能有兩種選擇:1)延遲擴展存在問題或2)直接分配給'%cd%'變量的值會掩蓋值。 –

回答

3

如果您的批處理文件做這樣的事情:

@echo off 
echo Start at: %cd% 

cd sub 
cd sub2 

echo Currently at: %cd% 

第二echo命令將顯示C:\some\dir\sub\sub2肯定。然而,如果%cd%放置在一個碼塊,也就是包含在括號中(如一個iffor命令內),那麼這是經典的延遲擴展問題(如MC ND表示):

@echo off 
setlocal EnableDelayedExpansion 

>log.txt (
    cd sub 
    cd sub2 

    echo Before this code block the current directory was: %cd% 
    echo But currently it is: !cd! 
) 

有關更多詳細信息,請查找「延遲擴展」。

+0

我編輯了我原來的問題,並添加了一個鏈接到我的批處理文件。你對**代碼塊/延遲擴展**是正確的! 'setlocal EnableDelayedExpansion'並使用'!cd!'命令修復它。謝謝! – bendulum

1

I)你可以在腳本的乞討保存在當前目錄:

@echo off 
set "curr_dir=%cd%" 
...some cd commands... 
cd /d "%curr_dir%" 

II)可以使用pushd/popd(可更好)...

@echo off 
.... 
pushd sub 
...some commands... 
popd 
pushd sub2 
...some commands... 
popd 

...還是這個樣子,如果可能不存在指定的子目錄:

@echo off 
.... 
pushd . 
cd /D sub 
...some commands... 
popd 
pushd . 
cd /D sub2 
...some commands... 
popd 

說明: 假設你成功推sub到目錄棧,但sub2不能發現如此pushd sub2失敗,並沒有推動,下一個popd無意推動sub;推動當前目錄pushd .但永遠不會失敗...

more info

+0

關於I)我不想去原始目錄_back_。我試圖在cd命令後獲取當前目錄。將嘗試II)並報告回來。 – bendulum

+0

雖然他們似乎很有用'pushd'和'popd'在我的情況下不起作用。 – bendulum

相關問題