我有一个脚本,它使用 FOR 循环将文件从特定目录(和子目录)递归加载到 java 类路径中。它看起来像这样:
FOR /r目录%%F IN (*.jar) DO call :addcp %%F
不幸的是,我现在需要从结果中排除一个特定的子目录(我不想加载一些 jar 文件)。我尝试在 FOR 循环内嵌套一个 IF 语句,但没有任何成功。
不幸的是,更改脚本语言不是一种选择,并且迭代每个子目录将是维护的噩梦。有没有人有办法做到这一点?
我试过类似的东西:
FOR /r目录%%F IN ( *
.jar) DO IF %%F==*
字符串*
DO call :addcp %%F
但它没有用。
这是一个脚本,用于转储“%ProgramFiles%”下所有 EXE 文件的绝对路径列表,但“Windows NT”子目录中的那些文件除外。我认为你可能会因为你正在寻找的东西而击败它。
我会推荐find,看看man find。类似 find "%ProgramFiles%\" -iname " .exe" !-regex "%ProgramFiles%\folder_to-exclude. $" -exec call :addcp {} \; 可能会做你想做的事。
%%F 解析为 .jar 文件的路径,而不是目录名称,这就是 == 不起作用的原因。
我建议一个两步的过程 - 首先做
接着
findstr 的 /V 参数打印所有与您传入的字符串不匹配的行。如果您确实需要,您应该能够使用通配符甚至正则表达式来排除。