如何在PowerShell中创建供javac使用的参数文件?
解决PowerShell中javac参数文件使用问题
问题根源
- PowerShell的
@运算符冲突:PowerShell里@是*参数展开(splatting)*符号,直接写javac @files时,PowerShell会把files当作变量名而非文件名传给javac,导致命令失效。 - UTF-16 BOM编码问题:用
dir -n *.java > files生成的文件是UTF-16LE编码带BOM头,javac无法识别这种编码的参数文件,会把BOM字符当成文件名的一部分,出现invalid flag: ■Driver.java错误。
正确操作步骤
步骤1:创建无BOM的UTF-8参数文件
不要用默认的重定向>生成文件,改用指定编码的命令:
# 生成包含Driver.java的无BOM UTF-8文件 "Driver.java" | Out-File -FilePath files -Encoding utf8NoBOM # 批量获取java文件时用这条: Get-ChildItem -Name *.java | Out-File -FilePath files -Encoding utf8NoBOM
步骤2:让javac正确识别@参数文件
有两种方法避免PowerShell解析@符号:
方法一:使用--%停止PowerShell解析
--%是PowerShell的停止解析符号,后面的内容会直接传给外部命令:
javac --% @files
方法二:转义@符号
用反引号`转义@,让PowerShell把它当作普通字符传给javac:
javac `@files
验证
执行上述命令后,javac会正确读取参数文件里的Driver.java并完成编译。
内容的提问来源于stack exchange,提问作者jflemming
相关产品推荐
相关产品推荐

