2017-11-17 209 views
1

我有類似以下的東西......擴展if語句中設置變量的%userprofile%。批量

set /p dir=Specify Path: 
if exist %dir% (
echo ok 
) else(
echo not ok 
) 

如果用戶輸入類似%USERPROFILE%的路徑或變量

%時,DIR%是用來%USERPROFILE%之內沒有擴大

例如

set dir=%userprofile% 
echo %dir% :: this does not expand 
call echo %dir% :: this does expand 
cd %dir% :: does not expand 
call cd %dir% :: expands 

但如何我想有一個if語句中的路徑展開。

一直在我的頭上,我並不真正瞭解DelayedExpansion。

謝謝。

+1

你的'SET/P'命令後這樣做:'呼叫建立「DIR =%DIR%」' – Squashman

+0

我想我已經得到了我的頭周圍延遲擴展,這似乎允許改變一個變量是在聲明結束之前閱讀,如果這是正確的,我認爲這對我的情況沒有什麼幫助,這可能是爲什麼我很困惑,因爲我嘗試了所有的組合! &%沒有運氣。如果('echo %% dir %%')中的/ f %% a做了echo%a我相信也會擴展,但是這對我也沒有幫助。:( – Chumbawamba

+0

感謝Squashman現在幾乎看起來很明顯。 – Chumbawamba

回答

2

如果用戶輸入環境變量作爲路徑,則可以使用CALL命令輕鬆擴展該變量。所以你的代碼看起來像這樣。

@ECHO OFF 
set /p "dir=Specify Path:" 

CALL set "dir=%dir%" 

if exist "%dir%" (
    echo ok 
) else (
    echo not ok 
)