我想列出當前目錄的所有父目錄。如何列出批處理文件中當前目錄的所有父目錄
例如:
C:\a\b\c\d\e>list-all-parent-directories.bat
C:\a\b\c\d
C:\a\b\c
C:\a
C:
我想列出當前目錄的所有父目錄。如何列出批處理文件中當前目錄的所有父目錄
例如:
C:\a\b\c\d\e>list-all-parent-directories.bat
C:\a\b\c\d
C:\a\b\c
C:\a
C:
你可以嘗試一種遞歸方法
@echo off
setlocal enableextensions disabledelayedexpansion
:echoParent
for %%a in ("%~f1.") do if not "%%~fa"=="%%~dpa" (
for %%b in ("%%~dpa.") do echo %%~fb
call :echoParent "%%~dpa"
)
它只是將調用自身的每個父文件夾,直到當前文件夾的完整路徑的驅動器相匹配,並路徑(根目前的文件夾和父文件夾是相同的文件夾)
或者你可以嘗試與經典cd/echo
方法
@echo off
setlocal enableextensions enabledelayedexpansion
:echoParent
cd .. & if not "!cd!"=="%cd%" (echo !cd! & goto :echoParent)
在這種情況下,「特技」是該%cd%
變量在分析時解決,cd ..
已經執行過,但!cd!
在執行時被解決,cd ..
已經執行之後。這兩個變量只會在根文件夾中匹配。如果它們不匹配,則將當前活動目錄回傳給控制檯。
當批處理文件結束並且setlocal
被還原時,所有cd ..
更改都將被丟棄,並保留原始活動目錄。
下一個腳本工作:
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
call :showParent "%CD%"
ENDLOCAL
goto :eof
:showParent
set "_Parent=%~dp1"
echo(%_Parent:~0,-1%
if NOT "%~dp1"=="%~d1\" call :showParent "%_Parent:~0,-1%"
goto :eof
輸出示例:
D:\bat\Users\Sev\AppData\Local\Temp\_MEI50722> D:\bat\SO\41308193.bat
D:\bat\Users\Sev\AppData\Local\Temp
D:\bat\Users\Sev\AppData\Local
D:\bat\Users\Sev\AppData
D:\bat\Users\Sev
D:\bat\Users
D:\bat
D:
D:\bat\Users\Sev\AppData\Local\Temp\_MEI50722>
@Echo off
Call :DirUp "%CD%"&Goto :Eof
:DirUp
Set "ThisDir=%~dp1"&Echo:%~dp1
if Not ":\" Equ "%ThisDir:~-2%" Call :DirUp "%~dp1."
沒有終止反斜槓
關閉@echo
Call :DirUp "%CD%"&Goto :Eof
:DirUp
Set "ThisDir=%~dp1"
Echo:%ThisDir:~0,-1%
if Not ":\" Equ "%ThisDir:~-2%" Call :DirUp "%ThisDir:~0,-1%"
恕我直言非遞歸方法更爲簡單:
@echo off
setlocal EnableDelayedExpansion
set "this=" & set "next="
for %%a in ("%cd:\=" "%") do (
set "this=!this!\!next!"
set "next=%%~a"
if "!this:~2!" neq "" echo !this:~2!
)
有趣的方法,但如果當前目錄路徑包含任何'!'字符,則失敗。 – dbenham
最後一個應讀爲C:\'... – aschipfl
我想你忘了'C:\ A \ B'目錄? –