У меня есть сценарий, который рекурсивно загружает файлы из определенного каталога (и подкаталогов) в путь к классам Java, используя цикл FOR. Выглядит это так:
FOR / r каталог %% F IN (* .jar) НЕОБХОДИМО вызвать: addcp %% F
К сожалению, теперь мне нужно исключить конкретный подкаталог из результатов (я не хочу, чтобы загружались некоторые файлы jar). Я попытался вложить оператор IF в цикл FOR, но безуспешно.
К сожалению, изменение языков сценариев невозможно, и повторение каждого подкаталога стало бы кошмаром для обслуживания. У кого-нибудь есть способ это сделать?
Я пробовал что-то вроде:
FOR / r каталог %% F IN (*
.jar) DO IF %% F ==*
строка*
ВЫЗЫВАТЬ: addcp %% F
но это не сработало.
Вот сценарий для создания дампа списка абсолютных путей всех файлов EXE в "% ProgramFiles%", кроме тех, которые находятся в подкаталоге "Windows NT". Я думаю, вы могли бы превратить это в представление того, что вы ищете.
@echo off
for /f "usebackq delims=" %%i in (`dir "%ProgramFiles%\*.exe" /s /a /b`) do call :checkit "%%i"
goto end
:checkit
echo %1 | find /i "%ProgramFiles%\Windows NT\" >NUL 2>NUL
if errorlevel 1 echo %~1
:end
%% F разрешает путь к файлу .jar, а не имя каталога, поэтому == не работает.
Я предлагаю двухэтапный процесс - сначала сделайте
dir /s /b directory\*.jar > temp.txt
а потом
for /F usebackq %%I in (`findstr /V <excluded path> temp.txt`) do call :addcp %%I
параметр / V для findstr печатает все строки, которые не соответствуют строке, которую вы передаете. Вы также должны иметь возможность использовать подстановочные знаки или даже регулярные выражения для исключения, если вам действительно нужно.
Я бы порекомендовал найти, взгляните на мужскую находку. Что-то вроде find "% ProgramFiles% \" -iname ".exe "! -regex"% ProgramFiles% \ folder_to-exclude.$ "-exec call: addcp {} \; может делать то, что вы хотите.