exe的命令行参数

时间:2010-12-13 15:03:35

标签: command-line powershell batch-file

我的Powershell字符串有点问题。我正在使用一个名为SymmetricDS的Java程序,它接受某些管理功能的Windows批处理文件的参数。其中之一是打开节点的注册,传递包含节点组和id的字符串:

& .\bin\sym.bat -p symmetric.properties --open-registration 'store,01'

在批处理文件中,调用java,上面传递的属性传递方式如下:

java -Dthis -Dthat -Dfoo -Dbar %1 %2 %3 %4 %5 %6 %7 %8 %9

此部分之后java中的函数失败:

int index = argument.trim().indexOf(",");
if (index < 0) {
    throw new SymmetricException("LauncherMissingFilenameTriggerSQL", OPTION_OPEN_REGISTRATION);
}

index显然是-1。为什么它找不到逗号字符,我不知道。我只知道当我在.cmd或.bat文件中运行相同的文件时,它的工作正常:

.\bin\sym.bat -p symmetric.properties --open-registration "store,01"

我怀疑它与Powershell的字符串是Unicode有关,而且在从那里进入批处理文件然后进入java的过程中发生了不正确的事情。

有人知道如何直接在Powershell中调用它吗?

已解决zdan's answer的工作方式,以及对此类举措有点像:

.\bin\sym.bat -p symmetric.properties --open-registration '"store,01"'

1 个答案:

答案 0 :(得分:4)

这不是一个unicode问题。你绊倒了powershell的解析器。当您调用call运算符时,powershell会解析其余的参数,然后将它们传递给您调用的脚本。字符串'store,01'周围的单引号有效地被剥离并被解释为扩展为两个单独参数的列表。

直接运行cmd.exe,同时仔细引用命令字符串:

 cmd.exe /c ' .\sym.bat -p symmetric.properties --open-registration "store,01" '

请注意,您必须将命令作为单个字符串传递给cmd.exe,否则它将由powershell解析。