javac powershell类路径分隔符

javac powershell类路径分隔符,powershell,classpath,javac,separator,Powershell,Classpath,Javac,Separator,所以我知道不同的操作系统需要不同的类路径分隔符。我正在运行一个windows版本,其中CMD已被Powershell替换,这在使用分号分隔符时会导致问题 我尝试运行的命令以cmd/c开始,尝试让它在命令提示符下运行,但我认为当PowerShell解析整个命令时,它会看到分号,并认为结束了 我的全部命令是: cmd/cjavac-cppath1;路径2-d目标路径源路径 我试过使用空格、冒号和句号,但都没有用。有人能提出解决办法吗 这是我关于stackoverflow的第一个问题,希望社区能够提供

所以我知道不同的操作系统需要不同的类路径分隔符。我正在运行一个windows版本,其中CMD已被Powershell替换,这在使用分号分隔符时会导致问题

我尝试运行的命令以
cmd/c
开始,尝试让它在命令提示符下运行,但我认为当PowerShell解析整个命令时,它会看到分号,并认为结束了

我的全部命令是:

cmd/cjavac-cppath1;路径2-d目标路径源路径

我试过使用空格、冒号和句号,但都没有用。有人能提出解决办法吗


这是我关于stackoverflow的第一个问题,希望社区能够提供帮助,并最终帮助他人。:)

我建议您使用Powershell以以下方式启动此过程

Start-Process cmd.exe -ArgumentList "/c javac -cp PATH1;PATH2 -d DESTINATION_PATH SOURCE_PATH" -NoNewWindow

不需要在CMD中运行
javac
。只要在可能包含空格或特殊字符的参数周围加上引号。我还建议使用(
&
)。在这种情况下,它是可选的,但如果您将可执行文件放在引号中(例如,因为可执行文件或路径包含空格,或者您希望将其放在变量中),则它是必需的

您还可以使用提供参数:

$javac  = "$env:JAVA_HOME\bin\javac.exe"
$params = '-cp', "PATH1;PATH2",
          '-d', "DESTINATION_PATH",
          "SOURCE_PATH"

& $javac @params

javac-classpath“path1:path2:”main.java在powershell中完成了这个任务。cmd不需要双引号,但是,在使用powershell时,我们需要将引号放在一起,并且它可以顺利工作。

-cp“PATH1;PATH2”
您所说的“cmd已被替换”是什么意思?CMD在所有Microsoft操作系统中都可用,包括但不限于最新的“Windows 10”。它不工作的机器正在使用Windows Insider程序中的Windows技术预览。我指的是So CMD仍然存在,但我相信在构建命令
String[]
PowerShell的java程序的幕后,正在使用PowerShell来执行它。我将命令复制粘贴到CMD和PowerShell的结果支持这一点。感谢您提供的解决方案。详细说明PowerShell“替换”CMD。我在想,在最新的windows预览版本中,由java code
process pro=Runtime.getRuntime().exec(String[]cmdArray,String[]envp,File dir)创建的进程已在PowerShell中运行,现在不是命令提示符。虽然我最初的尝试似乎支持这一理论,但错误实际上在另一个地方;路径2以双引号括起。这部分地解决了问题。我可以从CMD调用
javac
,但我认为我没有正确地设置PowerShell,使其只能使用
javac
。我很确定你的splatting解决方案会起作用。基本设置只需要环境变量
JAVA\u HOME
(指向安装JDK的文件夹)和
path
环境变量中的
javac.exe
(通常
%JAVA\u HOME%\bin
)路径。这两个环境变量都会影响CMD和PowerShell,也就是说,如果您的安装程序在CMD中工作,那么它也应该在PowerShell中工作。尽管此答案正确,但“:”将不起作用。它必须是分号“;”。
$javac  = "$env:JAVA_HOME\bin\javac.exe"
$params = '-cp', "PATH1;PATH2",
          '-d', "DESTINATION_PATH",
          "SOURCE_PATH"

& $javac @params