2016-04-18 249 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 
) 

这种方法的一大优点是系统可以完成路径计算,因此您无需为系统无论如何已经能够为您做的事情编写额外的代码。
因此不需要字符串操作活动,不需要延迟扩展,这会降低整体性能,甚至可能容易出错,特别是在特殊情况下。

相关问题