需要排除批量For循环中的特定结果

我有一个脚本recursion地加载文件从一个特定的目录(和子目录)到一个java类path使用FOR循环。 它看起来像这样:

FOR / r 目录 %% F IN(* .jar)DO调用:addcp %% F

不幸的是,我现在需要从结果中排除一个特定的子目录(我不希望加载一些jar文件)。 我试图在FOR循环中嵌套一个IF语句,但是没有成功。

不幸的是,改变脚本语言不是一种select,迭代每个子目录将是一个维护的噩梦。 有没有人有办法做到这一点?

我尝试了这样的:

FOR / r 目录 %% F IN( * .jar)DO IF %% F == * string * DO call:addcp %% F

但它没有工作。

下面是一个脚本,用于转储“%ProgramFiles%”下的所有EXE文件的绝对path列表,除了那些在“Windows NT”子目录中的path。 我想你可能会打败这个提交你正在寻找的东西。

 @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 

我会推荐找,看看男的找。 就像find“%ProgramFiles%\”-iname“ .exe”! -regex“%ProgramFiles%\ folder_to-exclude。 $”-exec call:addcp {} \; 可能做你想做的事情。

%% Fparsing为.jar文件的path,而不是目录名,这就是为什么==不起作用。

我build议一个两步的过程 – 首先要做的

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

接着

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

findtr打印的/ V参数打印出与传递的string不匹配的所有行。如果您真的需要,您应该可以使用通配符或甚至正则expression式来排除您的排除。