Java 如何从批处理执行中排除文件?

Java 如何从批处理执行中排除文件?,java,batch-file,compilation,Java,Batch File,Compilation,我编写了一个批处理文件,使用javac编译所有.java文件: javac *.java 但后来我添加了另一个文件,我不想编译它。例如,我们将其命名为ignored.java 在批处理编程中是否有一种方法可以从代码执行中排除某些内容 比如: javac *.java /except ignored.java 另一种方法是使用参数文件 创建一个名为classes的文件,该文件只包含要编译的文件,如下所示: MyClass1.java MyClass2.java MyClass3.java 您

我编写了一个批处理文件,使用javac编译所有.java文件:

javac *.java
但后来我添加了另一个文件,我不想编译它。例如,我们将其命名为ignored.java

在批处理编程中是否有一种方法可以从代码执行中排除某些内容

比如:

javac *.java /except ignored.java

另一种方法是使用参数文件

创建一个名为
classes
的文件,该文件只包含要编译的文件,如下所示:

MyClass1.java
MyClass2.java
MyClass3.java
您可以这样做:

dir*.java/a:-d/b | find/i/v“ignored.java”>类
然后,按如下方式运行javac命令:

javac @classes

由于类文件中未提到ignored.java,因此将跳过它

cmd
需要一个
for
循环来为每个项执行
操作<代码>如果
可用于比较。这将为您提供以下解决方案:

@echo off
for %%i in (*.java) do if /i not "%%~i" == "ignored.java" javac "%%~i"

另请注意
/i
开关用于
if
,该开关使比较不区分大小写。

使用
用于
循环,然后使用
如果不是“%%i”==“忽略.java”
。(*.java)中%%i的
行中的某些内容如果/i不“%%~i”==”则被忽略。java“javac”%%~i”
有效。我尝试了类似的方法,但语法不正确,因为我以前从未编写过批处理:p。你想把它作为答案提交,这样我就可以接受了吗?谢谢你的回答。此解决方案确实解决了上述问题,但不可扩展。如果需要在一个包含数百个.java文件的文件夹中运行,那么编写一个包含所有需要编译的文件的文件,而不是用一个javac命令列出这些文件是没有意义的。@MiroslavMilanov这样做有好处。使用
@filename
意味着您可以将几千个文件作为一个进程来处理,也就是说,您只运行一个javac.exe进程,其中包含长度不受限制的文件名参数列表。
for
loop方法将为它找到的每个文件运行一个javac进程,这可能会非常密集。此外,将数据写入单个文件是一个非常快速的过程,不太可能增加任何明显的开销。请针对不同数量的文件在for-one循环中尝试此方法,并比较它们的执行时间,它们可能会让您感到惊讶。这实际上是一个很好的观点。我确实注意到,带有另一个问题的命令是一次计算一个的,我假设这个解决方案也是一样的。谢谢你指出这一点。我收回我关于可伸缩性的话,这是非常好的。