我的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"'
答案 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解析。