Necesidad de excluir un resultado específico de un bucle Batch For

Necesidad de excluir un resultado específico de un bucle Batch For

Tengo un script que carga archivos de forma recursiva desde un directorio (y subdirectorios) específico en una ruta de clases de Java mediante un bucle FOR. Se parece a esto:

PARA /rdirectorio%%F EN (*.jar) HACER llamada: addcp %%F

Desafortunadamente, ahora necesito excluir un subdirectorio específico de los resultados (no quiero que se carguen algunos de los archivos jar). Intenté anidar una declaración IF dentro del bucle FOR, pero no tuve éxito.

Desafortunadamente, cambiar los lenguajes de secuencias de comandos no es una opción y iterar cada subdirectorio sería una pesadilla de mantenimiento. ¿Alguien tiene una manera de hacer esto?

Intenté algo como:

PARA /rdirectorio%%F IN ( *.jar) DO IF %%F== *cadena *DO llamada :addcp %%F

pero no funcionó.

Respuesta1

Aquí hay un script para volcar una lista de las rutas absolutas de todos los archivos EXE en "%ProgramFiles%", excepto aquellos que están en el subdirectorio "Windows NT". Creo que probablemente podrías presentar esto para lo que estás buscando.

@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

Respuesta2

Recomendaría buscar, echar un vistazo a man find. Algo así como buscar "%ProgramFiles%\" -iname ".exe" ! -regex "%ProgramFiles%\folder_to-exclude.$" -llamada ejecutiva :addcp {} \; podría hacer lo que quieras.

Respuesta3

%%F resuelve la ruta al archivo .jar, no el nombre del directorio, razón por la cual == no funciona.

Sugiero un proceso de 2 pasos: primero haz

dir /s /b directory\*.jar > temp.txt

y luego

for /F usebackq %%I in (`findstr /V <excluded path> temp.txt`) do call :addcp %%I

el parámetro /V para findtr imprime todas las líneas que no coinciden con la cadena que ingresa. También debería poder usar comodines o incluso expresiones regulares para su exclusión, si realmente lo necesita.

información relacionada