2016-04-18 13 views
0

私は、フォルダの構造を有する:batファイルディレクトリのパスを取得

"1.1" "1.2" "1.3" フォルダ "1.1" "1.1.1" "1.1.2"

が含まれています含まれてい

フォルダ "1" 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を使用しています。これは、相対的なソースパスが指定されている場合に現在のディレクトリを基準にしたパスを返すためです。

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

サマリー行?? File(s)を避けるために、それをフィルタリングするための簡単なfindコマンドを使用します:/Lは実際にはコピーしないように指示

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 
) 

この方法の大きな利点は、システムがパス計算を実行するため、システムがすでにあなたのためにできることのために余分なコードを書く必要がないことです。
したがって、文字列操作アクティビティは必要ありません。遅延展開は必要ありません。これにより、パフォーマンスが全体的に低下し、特に特殊な場合にエラーが発生する可能性があります。

関連する問題