在 CMD 中列出没有特定子文件夹的文件夹

在 CMD 中列出没有特定子文件夹的文件夹

我遇到一个问题,我需要找到驱动器上不包含名为“Arg”的文件夹的所有文件夹。我知道如何使用 DIR 反向执行此操作,即查找具有特定名称的所有子文件夹,但由于我需要相反的操作..我依靠超级用户的智慧来帮助我。

谢谢。

答案1

我认为FOR/IF NOT EXIST是你的朋友,在这种情况下......

对于当前文件夹的直接子文件夹...

for /d %A in (*) do @if not exist "%~fA\Arg\*" echo %~fA

或者递归,从当前文件夹向下......

for /d /r %A in (*) do @if not exist "%~fA\Arg\*" echo %~fA

或者以递归方式从给定路径...

for /d /r X:\pathto %A in (*) do @if not exist "%~fA\Arg\*" echo %~fA

反过来...

for /d %A in (*) do @if exist "%~fA\Arg\*" echo %~fA
for /d /r %A in (*) do @if exist "%~fA\Arg\*" echo %~fA
for /d /r X:\pathto %A in (*) do @if exist "%~fA\Arg\*" echo %~fA

在批处理文件中,您需要转义该%符号......

for /d %%A in (*) do @if exist "%%~fA\Arg\*" echo %%~fA
for /d /r %%A in (*) do @if exist "%%~fA\Arg\*" echo %%~fA
for /d /r X:\pathto %%A in (*) do @if exist "%%~fA\Arg\*" echo %~fA

for /d %%A in (*) do @if not exist "%%~fA\Arg\*" echo %%~fA
for /d /r %%A in (*) do @if not exist "%%~fA\Arg\*" echo %%~fA
for /d /r X:\pathto %%A in (*) do @if not exist "%%~fA\Arg\*" echo %~fA

如果您经常这样做,也许一个宏...

doskey nosubdir=for /d %A in (*) do @if not exist "%~fA\$*\*" echo %~fA
doskey nosubdirrec=for /d /r %A in (*) do @if not exist "%~fA\$*\*" echo %~fA
...
cd /d x:\pathto
nosubdir Arg
nosubdirrec Arg

答案2

在此处输入图片描述

如果您可以运行 recursive dir 并将其输出重定向到文件,那么您就成功了一半。剩下的工作可以通过 find 命令来完成,该命令查找包含或不包含给定字符串的行。

这里我将目录列在 mydirs.lst 中。首先,我查找包含字符串“Links”的目录,然后使用 /v 开关执行相反的操作。

相关内容