Command line exe的命令行参数

Command line exe的命令行参数,command-line,powershell,batch-file,Command Line,Powershell,Batch File,我对Powershell字符串有点小问题。我正在使用一个名为的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

我对Powershell字符串有点小问题。我正在使用一个名为的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);
}
我怀疑这与Powershell的字符串是Unicode有关,在从Unicode到批处理文件再到java的过程中发生了一些不正确的事情

有人知道我怎么能直接在Powershell中调用它吗

已解决:工作正常,欺骗Powershell有点像这样:

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

这不是一个unicode问题。您遇到了powershell的解析器。调用调用运算符时,powershell将解析其余参数,然后将它们传递给正在调用的脚本。字符串“store,01”周围的单引号实际上被剥离,并被解释为一个列表,该列表被扩展为两个单独的参数

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

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

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

。即使没有call操作符(如第一个示例所示),
'store,01'
仍会扩展为2个元素,而不是剩余的1个元素。我确实设法用
'“store,01”
欺骗了它,这样它就只去掉了外部的撇号。我想我需要学习更多关于解析器的知识,以避免其他奇怪之处,因为编写脚本来帮助我控制其他应用程序是我使用powershell的主要方式。@Joel你说得对,只是删除call操作符没有帮助,我删除了它。
 cmd.exe /c ' .\sym.bat -p symmetric.properties --open-registration "store,01" '