うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【C#】ProcessStartInfo で スペースありの引数を渡す方法

C# 上でコマンドラインを実行するクラスとして ProcessStartInfo, Process があるのですが

こちら引数に スペースありを渡した場合、 別のコマンドオプションと認識されてしまい正しい挙動をしなくなってしまいます

// add /Assets/TextMesh Pro の3引数と認識される
var progress = new ProcessStartInfo("git", "add /Assets/TextMesh Pro")
{
    WindowStyle = ProcessWindowStyle.Hidden,
    UseShellExecute = false,
    RedirectStandardOutput = true
};
 
using (var p = Process.Start(progress))
{
    var output = p.StandardOutput.ReadToEnd();
    p.WaitForExit();

    return output;
}

そのためスペースが含まれる引数を渡した場合は "" もしくは '' で囲ってあげる必要がでてきます

var progress = new ProcessStartInfo("git", "add \"/Assets/TextMesh Pro\"")

実行時にオプションを strings[] でもらって加工してから渡す方法でもいいかもしれません

public static void Exe(string path, params string[] args)
{
    foreach (var a in args)
    {
        if (a.Contains(" "))
        {
            // 加工処理
        }
    }
}