需要從 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

下面的腳本用於轉儲「%ProgramFiles%」下所有 EXE 檔案的絕對路徑清單(「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

答案2

我推薦 find,看看 man find 。類似 find "%ProgramFiles%\" -iname ".exe" ! -regex "%ProgramFiles%\要排除的資料夾。$" -exec call :addcp {} \; 可能會做你想做的事。

答案3

%%F 解析為 .jar 檔案的路徑,而不是目錄名,這就是 == 不起作用的原因。

我建議分兩步驟進行 - 首先

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

進而

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

findstr 的 /V 參數列印與您傳入的字串不符的所有行。

相關內容