Batch For 루프에서 특정 결과를 제외해야 함

Batch For 루프에서 특정 결과를 제외해야 함

FOR 루프를 사용하여 특정 디렉터리(및 하위 디렉터리)의 파일을 Java 클래스 경로로 재귀적으로 로드하는 스크립트가 있습니다. 다음과 같습니다:

/r에 대해예배 규칙서%%F IN (*.jar) DO 호출:addcp %%F

불행하게도 이제 결과에서 특정 하위 디렉터리를 제외해야 합니다(일부 jar 파일이 로드되는 것을 원하지 않습니다). FOR 루프 내부에 IF 문을 중첩하려고 시도했지만 성공하지 못했습니다.

불행하게도 스크립팅 언어를 변경하는 것은 선택 사항이 아니며 모든 하위 디렉터리를 반복하는 것은 유지 관리에 악몽이 될 것입니다. 누구든지 이 작업을 수행할 수 있는 방법이 있습니까?

나는 다음과 같은 것을 시도했습니다 :

/r에 대해예배 규칙서%%F IN ( *.jar) DO IF %%F== *문자열 *DO 호출 :addcp %%F

하지만 작동하지 않았습니다.

답변1

다음은 "Windows NT" 하위 디렉터리에 있는 파일을 제외하고 "%ProgramFiles%" 아래의 모든 EXE 파일의 절대 경로 목록을 덤프하는 스크립트입니다. 나는 당신이 찾고있는 것에 대해 이것을 제출할 수 있다고 생각합니다.

@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

답변2

나는 find를 권하고 싶습니다. man find를 살펴보세요. find "%ProgramFiles%\" -iname "과 같은 것입니다..exe" ! -regex "%ProgramFiles%\folder_to-exclude.$" -exec call :addcp {} \; 원하는 작업을 수행할 수 있습니다.

답변3

%%F는 디렉터리 이름이 아닌 .jar 파일의 경로를 확인하므로 ==가 작동하지 않습니다.

2단계 프로세스를 제안합니다. 먼저 수행하세요.

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

그런 다음

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

findstr에 대한 /V 매개변수는 전달한 문자열과 일치하지 않는 모든 행을 인쇄합니다. 정말로 필요한 경우 제외를 위해 와일드카드나 정규식을 사용할 수도 있습니다.

관련 정보