C#将带有标志(/ arg1 / arg2)的参数传递给exe

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#将带有标志(/ arg1 / arg2)的参数传递给exe相关的知识,希望对你有一定的参考价值。

我可以使用一些帮助来确定如何将多个参数传递给我的可执行文件。我需要能够运行如下的可执行类型:myproject.exe -project ProjectName -jobs job1,job2

到目前为止,我的可执行文件设计用于运行另一个需要项目名称和单个作业名称的可执行文件,因此我的可执行文件将遍历给定的作业,以便为每个提供的作业名称运行其他可执行文件。然后,我将根据给定的每个作业的其他可执行文件的输出执行其他操作。例如,它列出了作业的状态,如果给定的任何作业未处于运行状态,我将使我的可执行文件在提供的作业名称中启动第一个作业。我可以将参数传递给我的可执行文件,但我不知道如何将作业名称与第一个参数分开。这是我到目前为止所拥有的。

using System;
using System.Text;
using System.IO;
using System.Diagnostics;

public class Functions
{
        public static void runCommand(string executable, string execArguments)
    {
        Process process = new Process();
        process.StartInfo.FileName = executable;
        process.StartInfo.Arguments = execArguments; // Note the /c command (*)
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        process.Start();
        //* Read the output (or the error)
        string output = process.StandardOutput.ReadToEnd();
        Console.WriteLine(output);
        string err = process.StandardError.ReadToEnd();
        Console.WriteLine(err);
        process.WaitForExit();
    }
}

class MainClass
{
    static int Main(string[] args)
    {
        // Test if input arguments were supplied:
        if (args.Length == 0)
        {
            System.Console.WriteLine("Please enter a project and job name");
            System.Console.WriteLine("Usage: DSJobStatusMonitor <projectName>  <JobName1,JobName2>");
        }
    }
}
答案

如果将命令行参数更改为

<projectName> <Jobname1> [<Jobname2> [...]]

然后,您可以遍历作业:

string projectname = args[0];
for(int i=1; i<args.Length; i++)
{
    string job = args[i];
    // do something with the job
}

如果您希望将命令行参数保持为

<projectName> <Jobname1,Jobname2>

然后你需要在逗号分开并循环工作:

string projectname = args[0];
var jobs = args[1].Split(',');
foreach(var job in jobs)
{
    // do something with the job
}

以上是关于C#将带有标志(/ arg1 / arg2)的参数传递给exe的主要内容,如果未能解决你的问题,请参考以下文章

具有多个参数的函数中的 Javascript 默认参数

python -- 带有参数的装饰器

将可选参数优化传递到查询中

Java 8:带有可变参数的 Lambda

哪些参数被传递到 AsyncTask<arg1, arg2, arg3>?

Vue $将参数传递给已经有参数的函数