2013-10-09 87 views
0

我很想知道這種簡單的東西是多麼的簡單。將每個參數硬編碼到位對於排除故障非常繁瑣,而且我也不完全確定參數解析是如何工作的,除了循環它們。命令行參數(如何爲標記的參數保留下一個參數)

public static Main(string args[]) 
{ 
    for(int i = 0; i < args.Length; i++) 
    { 
      if(args[i] == "-path") 
      { 
       path = args[i++]; 
      } 
    //bleh 
    } 
} 

我敢肯定,我錯過了在使用循環一個簡單的概念,如遞增..?

UPDATE:

這裏是我走的是臨時航線。我可以切換它。但現在我得到空路徑名無效

for(int i = 0; i < 0; i++) 
{ 
    if(args[0] == "-logpath" && (args[1].Contains("%") || args[1].ToLower().Contains("C") || args[1].Contains("\\"))) 
    { 
     logpath = args[1]; 
    } 
    if(args[2] == "-idpath" && (args[3].Contains("%") || args[3].ToLower().Contains("C") || args[3].Contains("\\"))) 
    { 
     serverIDpath = args[3]; 
    } 
    if(args[4] == "-queuepath" && (args[5].Contains("%") || args[5].ToLower().Contains("C") || args[5].Contains("\\"))) 
    { 
     servqueuepath = args[5]; 
    } 
    if(args[6] == "-ramlimit" && 0 < Convert.ToInt32(args[7])) 
    { 
     ramlimit = args[7]; 
    } 
    if(args[8] == "-paramsname" && (!args[11].Contains("\\") || !args[11].Contains(":")) && (args[11].Contains(".cmd") || args[11].ToLower().Contains(".txt") || args[11].Contains("bat"))) 
    { 
     spname = args[9]; 
    } 
    if(args[10] == "-idname" && (!args[11].Contains("\\") || !args[11].Contains(":")) && (args[11].Contains(".cmd") || args[11].ToLower().Contains(".txt") || args[11].Contains("bat"))) 
    { 
     sidname = args[111]; 
    } 
    if(args[12] == "-resourcetxtpath" && (args[13].Contains("%") || args[13].ToLower().Contains("C") || args[13].Contains("\\"))) 
    { 
     resourcetxt = args[13]; 
    } 
    if(args[14] == "-sysresource" && (args[15].Contains("%") || args[15].ToUpper().Contains("C") || args[15].Contains("\\"))) 
    { 
     ramoutput = args[15]; 
    } 
    if(args[16] == "-updatepath" && (args[17].Contains("%") || args[17].ToLower().Contains("C") || args[17].Contains("\\"))) 
    { 
     makeserverpath = args[17]; 
    } 
    if(args[18] == "-servelogpath" && (args[19].Contains("%") || args[19].ToLower().Contains("C") || args[19].Contains("\\"))) 
    { 
     Logpath = args[19]; 
    } 
    if(args[20] == "-fileserve" && (args[21].Contains("%") || args[21].ToLower().Contains("C") || args[21].Contains("\\"))) 
    { 
     fileservepath = args[21]; 
    } 
} 

批處理文件:

set rootpath=%userprofile%\desktop 
cd "%rootpath% 
fileread -logpath %rootpath%\fr_log.txt -idpath %rootpath%\ -queuepath %rootpath%\queuecheck.txt -ramlimit 1600 -paramsname serverparams.cmd -idname serverid.cmd -resourcetxtpath %rootpath%\ramcheck.txt -sysresource %rootpath%\sysresourceoutput.exe -updatepath %rootpath%\update.bat -servelogpath %rootpath%\fsrv_log.txt -fileserve %rootpath%\FileServe.exe 
+0

你的例子似乎是正確的。你還需要什麼?另外我會做的是檢查每個選項是否有相關的值。也就是說,確保'args [i ++]'沒有得到無效的引用。永遠不要相信用戶的輸入... –

+0

我可以走這條路。哈哈,並且忽略了「%rootpath%和args之前[111] – DaFuze

+0

也許我會提出一個新問題,我還沒有找到失蹤路徑偶然現象。 – DaFuze

回答