我現在搜索了幾個小時,並沒有找到任何適合我的解決方案。Windows批處理:獲取路徑而不縮短
當我嘗試獲取批處理文件的當前路徑時,我正常使用%〜dp0。 這將導致路徑如:D:\ VM \ TUTORI〜2 \ STARTS〜1.BAT
但是,這不是一個問題,如果只做文件管理,但我想用腳本來調用Vagrant命令。 它發生的流浪漢系統不喜歡這個縮短的路徑。 只要路徑足夠短或者直接從CMD調用它,它就可以工作。
我現在正在尋找一種方法來獲取我的工作目錄的任何未修改的路徑。 但無論我迄今爲止嘗試沒有工作,谷歌只給我如何人們縮短他們的路徑。 有沒有解決這個問題的實際解決方案?
我想設置我的腳本里的變量看起來像這樣: d:\ VM \ tutorialtest
編輯:
根據公認的答案,我的工作片段是沒有摘錄2. For循環中的「-2」。無論文件夾在哪裏,這都會爲我提供路徑。
setlocal EnableDelayedExpansion
set myPath=%~DP0
set myPath=%myPath:*\=%
set fullPath=
pushd \
for %%a in ("%myPath:\=" "%") do (
set thisDir=%%~a
for /D %%d in ("!thisDir:~0!*") do (
set fullPath=!fullPath!\%%d
cd %%d
)
)
popd
echo Full path: %~D0%fullPath%
結果:
D:\VM\tutorialtest
我已經編輯了一小段剪輯並添加了一些迴響以查看發生了什麼。可悲的是,這並沒有完全起作用,但它看起來像在那裏只是一些邏輯錯誤。這裏是代碼: – Panade
'SETLOCAL EnableDelayedExpansion 組mypath中=%〜DP0 組mypath中=%mypath中:* \ =% 組FULLPATH = PUSHD \ 用於%%一個在( 「%mypath中:\ =」「% 「)do( set thisDir = %%〜a echo A:%% a for/D %% d in(」!thisDir:〜0,-2!*「)do( echo D:%% d 組FULLPATH = FULLPATH \ %% d CD %% d ) ) POPD 回波全路徑:!%〜D0%FULLPATH%' – Panade
,輸出爲(縮短一個位): '一個:「 VM「 D:adobePreview D:DirectX Das System kann den angegebenen Pfad nicht finden。 D:驅動程序 Das System kann den angegebenen Pfad nicht finden。 D:日食 D:VM Das System kann den angegebenen Pfad nicht finden。 D:workspace Das System kann den angegebenen Pfad nicht finden。 A:「TUTORI〜2」 A:「」 完整路徑:D:\ DirectX \ Drivers \ eclipse \ VM \ workspace' – Panade