2017-09-22 62 views
0

我在寫一個批處理文件,我想將一些文件從根路徑移動到cd .. root。批處理文件向後退一步

我使用%〜dp0來查找根路徑。

什麼是從根路徑返回一步的最佳方法?

非常感謝

回答

0

你是幾乎沒有,只是用%~dp0..

,或者如果你想讓它完全解決,用這一招

@echo off 
call :resolve "%~dp0.." 
goto :eof 

:resolve 
echo %~f1 
goto :eof 

一個解釋,請參閱本SO回答https://stackoverflow.com/a/15568171/30447

1

%~dp0指向paren t當前批處理文件的目錄(包括尾部\),%~dp0..因此指向批處理文件的祖父目錄。

您可以使用for loop及其變量引用(%%I)的~f modifier解決路徑:

for %%I in ("%~dp0..") do echo/%%~fI 
從錯字
+0

除此之外,你的回答給我留下了更多的問題。 '%〜dp0.'指向父目錄,'%〜dp0 ...'指向偉大的祖父母等。如果'%〜dp0'擴展爲驅動器盤符和路徑,爲什麼我需要使用'〜f'修飾符。在括號評估過程中''%〜dp0 ..「'沒有擴展,因此將完全擴展的驅動器和路徑作爲變量'」%% I「'傳遞給一個字符串。爲什麼需要'〜f'的另一個擴展? – Compo

+0

@Compo,爲什麼'%〜dp0..'會自動解決?無論您預先添加還是附加任何類似「..」的文件,'%〜dp0'只是簡單地擴展到驅動('d')和路徑('p')到當前批處理文件的父目錄,結尾爲'\'。 '.'指向相同的目錄(所以'anydir \ middir \ subdir'與'anydir \ middir \ subdir \ .'相同),'..'指向父目錄(所以'anydir \ middir \ subdir \ ..'和'anydir'一樣);沒有'...'(你需要做'anydir \ middir \ subdir \ .. \ ..'指向'anydir')... – aschipfl

+0

@Compo,你是什麼意思的「圓括號評估」 ?你是說,'for'會自動解析'in'後面的部分?不,不是的;它不會解析類似於'anydir \ middir \ subdir \ .. \ .. \ .. \ file.ext'的路徑,它只在最後一個路徑元素出現時解決通配符('*','?')所以在最後'\'後面);您需要使用'〜f'修飾符來解析路徑;注意'for'不訪問文件系統來檢查路徑是否真正存在,除非包含通配符... – aschipfl