我已经阅读了本文档,其中包括示例命令行参数文件的部分,但不知道如何在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
我尝试创建files
和files.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文件-请参阅此答案。