2016-04-18 242 views
0

我的文件夾結構:bat文件獲取目錄路徑

文件夾中的 「1」,其中包含 「1.1」, 「1.2」, 「1.3」 文件夾 「1.1」 包含 「1.1.1」 「1.1.2」

在bat文件:

cd %folderDir% 
@echo off 
call :treeProcess 
goto :eos 

:treeProcess 

for /f "delims=" %%a IN ('dir /a:-d/b 2^>nul ') do echo "%%~fa" >>%pathDdfFile% 

for /D %%d in (*) do (
    echo %%d >>%pathDdfFile% 
echo %%d 
cd %%d 
    call :treeProcess 
    cd .. 


) 
goto :eof 

:eos 

cd \ 

我得到:

1.1 
1.1.1 
1.1.2 
1.2 
1.3 

,但我需要:

1.1 
1.1\1.1.1 
1.1\1.1.2 
1.2 
1.3 

回答

0

爲了得到一個目錄列表一樣,你的願望,你可以這樣做:

@ECHO OFF 
SETLOCAL EnableDelayedExpansion 
FOR /F "delims=" %%G IN ('DIR /S /B /A:D /O:N ^| SORT') DO (
    SET tmp=%%G 
    ECHO !tmp:%CD%\=! 
) 

這種意志,如果從文件夾1內執行,給你:

1.1 
1.1\1.1.1 
1.1\1.1.2 
1.2 
1.3 

它的工作方式是從DIR /S /B命令的輸出中刪除當前目錄。

+0

謝謝!這很棒 – liraz

0

獲取相對路徑的最簡單方法是使用xcopy /L,因爲它在給定相對源路徑的情況下返回相對於當前目錄的路徑; /L告訴實際上無法複製:

xcopy /L /S /E /I /Y ".\*.*" "%TEMP%\" 

爲了避免摘要行?? File(s),用一個簡單的find命令過濾出來:

xcopy /L /S /E /I /Y ".\*.*" "%TEMP%\" | find ".\" 

這終於可以通過一個for /F循環來遍歷槽解析每一個項目:

for /F "delims=" %%I in (' 
    xcopy /L /S /E /I /Y ".\*.*" "%TEMP%\" ^| find ".\" 
') do (
    echo(%%I 
) 

這種方法的一大優點是系統可以完成路徑計算,因此您無需爲系統無論如何已經能夠爲您做的事情編寫額外的代碼。
因此不需要字符串操作活動,不需要延遲擴展,這會降低整體性能,甚至可能容易出錯,特別是在特殊情況下。

相關問題