如何在Powershell中创建用于javac的argfile



我已经阅读了本文档,其中包括示例命令行参数文件的部分,但不知道如何在PowerShell中使其工作。以下是我所做的:

首先,我可以使用(在windows PowerShell中,javac版本17.0.3(:编译Driver.java文件

>>javac Driver.java

但是,我想弄清楚如何使用参数文件(@filename(。

我尝试创建一个名为files.txt的文件,其中有一个条目列为Driver.java,然后使用javac和@file来指定要编译的内容:

PS-pluto>>dir -n *.java >files
PS-pluto>javac @files

我尝试创建filesfiles.txt。Driver.java肯定是入口,但javac命令不起作用。我正在文件和驱动程序所在的文件夹中运行此程序。

我读了这个问题的答案,它表明我需要添加引号,并尝试了这个(再次,有和没有.txt(:

PS-pluto>>dir -n *.java >files
PS-pluto>>javac "@files"

这可能有效,但不能解决问题。现在我得到一个新错误:

error: invalid flag:  ■Driver.java

我在txt文件中查找了隐藏的格式,只在Driver.java的末尾看到了返回行。不确定出了什么问题?

我知道在这种简单的情况下,使用参数文件是过分的,但我只是想弄清楚它是如何工作的。。。而不能。

注意:我已经知道如何在IDE中或使用构建工具编译它了。我正试图弄清楚如何在PowerShell中做到这一点,无可否认,我是一个新手PowerShell用户。

  • 参数开头的未加引号的@是PowerShell元字符,因此需要转义为`@或用字符串文字括起来。

  • Windows PowerShell中,>创建";Unicode";(UTF-16LE(文件,而javac很可能无法处理这些文件。

    • PowerShell(Core(7+中,无BOM的UTF8现在是(一致的(默认值,因此>将按原样工作。

    • Windows PowerShell中,最简单的解决方案是通过管道连接到Set-Content -Encoding Ascii,假设文件名仅包含ASCII范围字符。

# Create file "files" as an ASCII file.
# Note: The Get-ChildItem call is `dir -n *.java` fully spelled out.
Get-ChildItem -Name *.java | Set-Content -Encoding Ascii files
# Escape @ as `@ to treat it literally.
javac `@files

如果文件名包含非ASCII字符,并且javac需要无BOM的UTF-8编码,则需要做更多的工作,因为在Windows PowerShell中,您无法直接创建无BOM的UTF-8文件-请参阅此答案。

最新更新