![Как рекурсивно сканировать папки, используя `IF NOT EXIST`?](https://rvso.com/image/1555385/%D0%9A%D0%B0%D0%BA%20%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%20%D1%81%D0%BA%D0%B0%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B8%2C%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8F%20%60IF%20NOT%20EXIST%60%3F.png)
Я хочу сделать пакетный скрипт, который будет рекурсивно искать указанные каталоги, используя IF NOT EXIST
для выдачи ошибки, если папки не могут быть найдены нигде. Вот что у меня есть на данный момент:
IF NOT EXIST %FOLDER1% goto :ERROR
IF NOT EXIST %FOLDER2% goto :ERROR
IF NOT EXIST %FOLDER3% goto :ERROR
:ERROR
echo There aren't any folders to clean...
PAUSE goto :END
goto END
Я заменю %FOLDER1%
, %FOLDER2%
, %FOLDER3%
на разные имена в зависимости от обстоятельств и того, какие папки нужно очистить. Похоже, что мой текущий скрипт ищет только файлы, как мне определить каталоги с этим синтаксисом?
решение1
Я включил простой способ сделать это и сохранить список папок в одном скрипте, чтобы вы могли вносить изменения по мере необходимости, открывая скрипт и изменяя его соответствующим образом.
По сути это будетвызовподпрограмма :List
, которая будет содержать Arrary
переменную и ее значения, разделенные запятыми и заключенные в двойные кавычки для каждого пути к папке, которую вы хотите проверить. Затем она GOTO :EOF
передаст управление обратно оригиналу CALL
, а затем с помощью простогодляВ цикле вы можете перебирать %Array%
значения переменных одно за другим в соответствии с IF NOT EXIST
логикой.
@ECHO ON
CALL :List
FOR %%A IN (%Array%) DO (
IF NOT EXIST "%%~A" ECHO %%~A Does Not Exist
)
EXIT
:List
::: Maintain your folder paths in the 'SET Array=' as values enclosed by double quotes and separated by commas
SET Array="C:\Folder\Path1", "X:\\Folder\\Math2", "\\server\Bath3", "c:/Folder/Wrath4"
GOTO :EOF