2010-12-13 97 views
3

我有一個Powershell字符串的小問題。我正在使用一個叫做SymmetricDS的Java程序,該程序接受某個Windows批處理文件的參數用於某些管理功能。其中之一是,以打開註冊爲一個節點,使含有該節點的組和id的字符串:命令行參數到exe

& .\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作品,不欺騙PowerShell的有點像這樣:

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

回答

4

這不是一個Unicode問題。你絆倒PowerShell的解析器。調用調用操作符時,PowerShell會解析其餘的參數,然後將它們傳遞給您正在調用的腳本。圍繞字符串「store,01」的單引號實際上被剝離並且被解釋爲被擴展爲兩個單獨參數的列表。

只需直接運行cmd.exe的,同時認真引用您的命令字符串:

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

請注意,您必須將命令傳遞給CMD.EXE作爲一個字符串,否則將通過PowerShell的解析。

+0

有趣。即使沒有調用操作符(就像你的第一個例子),'store,01'仍然被擴展爲2個元素,而不是剩下1個。我確實設法用'''store,01「''來欺騙它,以便它只剝去外撇號。猜猜我需要更多地瞭解解析器以避免其他怪異,因爲編寫腳本來幫助我控制其他應用程序是我對PowerShell的主要使用。 – 2010-12-14 15:30:26

+0

@Joel你是對的,只是刪除呼叫操作員沒有幫助,我刪除了。 – zdan 2010-12-14 18:03:17