У меня есть проблема, где мне нужно найти все папки на диске, который не имеет папки с именем "Arg" .. Я знаю, как сделать это в обратном порядке, используя DIR, то есть, чтобы найти все подпапки с определенным именем, но мне нужно обратное к этому .. Я полагаюсь на мудрость суперпользователя, чтобы помочь Мне.

Благодарю.

2 ответа2

0

Если вы можете запустить рекурсивный каталог и перенаправить его вывод в файл, то вы на полпути. Остальное можно сделать с помощью команды find, которая ищет строки, которые содержат или не содержат данную строку.

Здесь я перечислил мои каталоги в mydirs.lst. Сначала я искал каталоги, содержащие строку "Ссылки", а затем сделал обратное, используя ключ /v.

0

Я думаю 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .