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

时间:2018-01-04 22:05:29

标签: c# arguments parameter-passing

我可以使用一些帮助来确定如何将多个参数传递给我的可执行文件。我需要能够运行如下的可执行类型: 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>");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果将命令行参数更改为

<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
}