尝试编译java文件时获取java.nio.file.invalidpathexception:非法字符< *>

3df52oht  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(570)

我是java的初学者。我开始了一个尝试性的oop项目,我正在为它创建一系列不同的包。因为我的项目是git跟踪的,所以我尝试在同步之前重新编译所有内容。为了简化通过vs代码powershell进行编译的过程,我创建了一个名为packageupdater.bat的小型windows批处理脚本,该脚本删除所有以前编译的java包,然后应重新编译所有索引的java源:

cd "C:\path\to\project\folder"
del ".\Confrontation\*" ".\Defines\*" ".\WorldBasics\*"
javac -d . ".\sources\Defines\*.java" ".\sources\WorldBasics\*.java" ".\sources\Confrontation\*.java"
pause

我尝试从powershell终端运行packageupdater.bat,但遇到以下错误:
c:\path\to\project\folder>javac-d“\源代码“.java”
线程“main”java.nio.file.invalidpathexception中出现异常:索引18处的非法字符<>。\sources\defines.java at java.base/sun.nio.fs.windowspathparser.normalize(windowspathparser)。java:182)在java.base/sun.nio.fs.windowspathparser.parse(windowspathparser。java:153)在java.base/sun.nio.fs.windowspathparser.parse(windowspathparser。java:77) 在java.base/sun.nio.fs.windowspath.parse(windowspath。java:92)在java.base/sun.nio.fs.windowsfilesystem.getpath(windowsfilesystem。java:229)在java.base/java.nio.file.path.of(path。java:147)在java.base/java.nio.file.paths.get(路径。java:69)在jdk.compiler/com.sun.tools.javac.main.option$37.process(option。java:693)在jdk.compiler/com.sun.tools.javac.main.option.handleoption(选项。java:1088)在jdk.compiler/com.sun.tools.javac.main.arguments.doprocessargs(arguments。java:381)在jdk.compiler/com.sun.tools.javac.main.arguments.init(arguments。java:193)在jdk.compiler/com.sun.tools.javac.main.main.compile(main。java:229)在jdk.compiler/com.sun.tools.javac.main.main.compile(main。java:170)在jdk.compiler/com.sun.tools.javac.main.compile(main。java:57)在jdk.compiler/com.sun.tools.javac.main.main(main。java:43)
删除部分正确执行,我可以验证每个删除操作。我知道文件的路径是正确的,因为当我在powershell中直接运行同一个javac命令时,它运行起来没有任何问题。我是新来使用批处理文件,所以我想知道,如果我做了什么错误的。有人能帮忙吗?

bqujaahr

bqujaahr1#

多亏了我对这个问题的评论,这个问题似乎是来自cmd没有预处理我的命令来提供与通配符名称匹配的所有文件,正如我预期的那样。因此java崩溃是因为它不支持通配符引用。
有人提出了一些解决方案,但我还是用powershell脚本packageupdater.ps1替换了批处理脚本packageupdater.bat。我还修改了脚本以删除change directory操作,因为现在我可以直接从vscode powershell终端中的项目目录运行它。我还用正确的powershell命令替换了以前脚本中的unix命令别名:

Remove-Item ".\Confrontation\*",".\Defines\*",".\WorldBasics\*"
javac -d . ".\sources\Defines\*.java", ".\sources\WorldBasics\*.java", ".\sources\Confrontation\*.java"

相关问题