在给定深度不包含特定文件夹的文件夹列表

时间:2018-01-25 16:08:17

标签: windows batch-file

我试图找到以下问题的答案。我一直在尝试列出不包含文件夹的目录树" sample"在给定的深度。深度级别将始终相同,我可以通过以下命令列出包含给定文件夹的所有文件夹,但我似乎无法弄清楚如何列出不包含的目录树文件夹。

以下是我目前使用的代码:

@echo off
pushd e:\tv\
for /f %%a in ('dir /s/b/ad') do (
if /i "%%~na" EQU "sample" echo %%a >>c:\temp.txt
)

此代码再次生成包含给定文件夹的所有目录树,并且将省略不包含的文件。如果我切换" EQU"到" NEQ"它会生成一个列表,但不是在适当的深度级别。

示例: - 这将是我在脚本中输出" EQU"

 e:\TV\#\foo\foo\foo\Sample

当我将代码切换到" NEQ"它将为我提供所有文件夹,包括其中包含该示例文件夹的文件夹。

我只想在第6个文件夹深处生成一个不包含Sample文件夹的目录列表。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL
PUSHD "U:\sourcedir"
FOR /f "delims=" %%d IN ('dir /b /s /ad') DO (
 REM tokenise - %%s gets level 3, %%t level 4 (level 0 is d:)
 FOR /f "tokens=4,5delims=\" %%s IN ("%%d") DO (
  IF "%%t"=="" (
   rem %%d is parent of 'sample'
   IF EXIST "%%d\sample" ECHO sample found IN %%d
  )
 )
)
popd    
GOTO :EOF

请注意,我在不同级别上测试并使用我的测试目录u:\sourcedir

使用目录名列表,使用\标记。如果第n个标记存在而第(n + 1)个标记不存在,那么它必须是父目录。请注意,如果第n个标记不存在,则不会执行内部for内的命令。

因此,问题变成“找到的目录是否包含sample?”

嗯 - if exist将检测到这种情况(好的 - 如果存在名为sample的子目录或文件),if not exist将检测到它的缺席。