5

我創建了一個可以讀取命令參數的控制檯應用程序(使用Visual Studio 2010)。從.BAT運行.application文件類型的c#控制檯應用程序

當我調試,我分析這是在工程 - 設置一些測試參數> [項目名稱]屬性... - >調試 - >命令行參數:

,上面寫到: 「parametername1 | parametervalue1」 「parametername2 | parametervalue2」「parametername3 | parametervalue3」

我用下面的代碼讀取參數:

for (Int16 argumentsCount = 0; argumentsCount < args.Length; argumentsCount++) 
{ 
    String[] parameterItem = args[argumentsCount].Split('|'); 
    String parameterName = parameterItem[0].ToString(); 
    String parameterValue = parameterItem[1].ToString(); 
    /*code continues*/ 

} 

當我在調試模式下運行它工作得很好的應用,所有參數都讀。

然後我發表了應用服務器,並確保它與正確的權限(爲示範的目的可以說安裝了它在C:\ MyApp的和遵守代碼駐留在MyApp.application

然後我創建一個批處理腳本執行應用程序的* .BAT包含以下命令:

"C:\MyApp\MyApp.application" "parametername1|parametervalue1" "parametername2|parametervalue2" "parametername3|parametervalue3" 

這類工程的應用程序執行,當我運行該批處理......不過......沒有我的參數是被我的應用程序接收,我知道這一點,因爲我重新編譯併發布了一些代碼來讀取有多少參數有可察覺:

Console.Write("Arguments " + args.Length.ToString()); 

,並顯示參數:0

有人可以告訴我怎麼寫我的批處理腳本來運行應用程序和分析我的參數/命令行參數。

+0

/astandard wayofdoingit? – 2011-06-08 07:12:16

回答

2

ETA:沒關係。您的問題是.application而不是.exe。看看你的文件關聯與.application會發生什麼情況相比.exe

> assoc .application 
.application=Application.Manifest 

> ftype Application.Manifest 
Application.Manifest=rundll32.exe dfshim.dll,ShOpenVerbApplication %1 

> assoc .exe 
.exe=exefile 

> ftype exefile 
exefile="%1" %* 

你看什麼傳遞有區別嗎?即正常的可執行文件獲取命令行參數(%*)。所以我想你應該使用一個可執行文件而不是可執行文件或其他任何.application(我從來沒有在野外見過它)。


有了一個相當小的測試程序

class Args { 
    static void Main(string[] args) { 
     for (int i = 0; i < args.Length; i++) { 
      System.Console.WriteLine("[{0}]=<{1}>", i, args[i]); 
     } 
    } 
} 

它工作正常,我。下面的批處理文件:

@"args.exe" "parametername1|parametervalue1" "parametername2|parametervalue2" "parametername3|parametervalue3" 

產生以下的輸出:

[0]=<parametername1|parametervalue1> 
[1]=<parametername2|parametervalue2> 
[2]=<parametername3|parametervalue3> 

所以我想有一些錯誤的代碼,你沒有告訴我們。也許你實際上並沒有在C#應用程序中使用命令行參數,而是在那裏引用不同的string[]

+0

非常感謝這麼多人。我的問題確實是我正在執行.application文件。要獲得.exe,我只需進入bin/Debug目錄並將.exe複製到我的部署目錄。然後,我修改了我的批處理腳本來執行.exe,並且當我再次運行我的批處理腳本時...嘿presto,它工作了!因此,我的批處理腳本最終看起來像這樣:「C:\ MyApp \ MyApp.exe」「parametername1 | parametervalue1」「parametername2 | parametervalue2」「parametername3 | parametervalue3」 – Fab 2011-06-09 05:41:30

-1

管道字符|在批處理文件中有特殊含義。我會建議使用不同的角色來使事情變得更容易。否則,您必須使用Escape Character來使用管道字符。它可能是這樣的:

"C:\MyApp\MyApp.application" "parametername1^|parametervalue1" "parametername2^|parametervalue2" "parametername3^|parametervalue3" 

注意插入符號^管道|之前。

+0

嗨,謝謝你回來。我嘗試使用「^」字符,但它似乎仍然沒有工作。 我的批處理腳本和解析我的參數的方式一定有問題......我無法弄清楚。 有人嗎? – Fab 2011-06-08 08:13:29

+2

'|'不是問題,因爲它們正確地引用它。它被正確傳遞給應用程序。 – Joey 2011-06-08 08:39:20

相關問題