我有文件夹结构:
文件夹" 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 :(得分: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
)
这种方法的最大优点是系统完成了路径计算,因此您不需要为系统已经能够为您做的事情编写额外的代码。
因此,不需要字符串操作活动,不需要延迟扩展,这会降低整体性能,甚至可能容易出错,特别是在特殊情况下。