
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.