bat文件获取dir路径

时间:2016-04-18 11:01:07

标签: batch-file command-line

我有文件夹结构:

文件夹" 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 

2 个答案:

答案 0 :(得分: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命令的输出中删除当前目录。

答案 1 :(得分: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
)

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