C# 命令行解析结果为“;“空路径名不合法”;

C# 命令行解析结果为“;“空路径名不合法”;,c#,command-line-arguments,C#,Command Line Arguments,一切看起来都很合适。。。虽然解析不是那么健壮 以下是论点 public static void Main(string[] args) { for(int i = 0; i < 0; i++) { if(args[0] == "-logpath" && (args[1].Contains("%") || args[1].ToLower().Contains("C") || args[1].Contain

一切看起来都很合适。。。虽然解析不是那么健壮

以下是论点

    public static void Main(string[] args)
    {
        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];
            }
            //etc.
批处理文件看起来不错

set rootpath=%userprofile%\desktop\filebin
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
以下是错误输出的图像:


我的问题是,嗯,我肯定遗漏了什么。

你怎么期望
args[3].ToLower().Contains(“C”)
永远是真的?(或对于任何其他参数…)是否在任何地方记录
serverIDpath
sidname
logpath
的值?我的猜测是,其中之一不是你所期望的。请注意,这种命令行解析的方法有点神秘——为什么所有命令行参数都应该按这种特定顺序排列?为什么在确定
paramsname
时要查看
args[11]
?我想。。如果这个人硬编码了路径,那么它恰好在驱动器C上,但是是的。哈哈,是的,它们都是全局变量。是的。我对条件做了一次检查,但没有校对。你的错误是什么?实际生成它的代码在哪里?你真的有一个永远不会进入的循环吗?您真的希望所有的命令行参数总是以一个设置的顺序出现吗?小写的字符串怎么可能包含大写的“C”?令人难以置信的是…实际的代码生成是一个让我着迷的问题。它在参数列表下面。是的,我尝试了另一种可能更成功的命令行解析,它不需要精确的顺序,但返回到该命令行以进行疑难解答..:)%userprofile%-是否更改为字符串?
set rootpath=%userprofile%\desktop\filebin
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