C# 将参数传递给包含空格的批处理文件

C# 将参数传递给包含空格的批处理文件,c#,batch-file,C#,Batch File,在批处理文件中给定以下命令: start /wait "" %1"Certs\makecert.exe" -n "CN="%2 -pe -ss Root -sr LocalMachine -sky exchange -m 120 -a sha1 -len 2048 -r 您可以看到,它希望将两个参数传递到批处理文件中。第一个是文件夹地址,第二个是正在创建的证书的使用者名称。问题在于文件夹地址中有空格:C:\Program Files(x86) 启动批处理文件的代码如下所示: private v

在批处理文件中给定以下命令:

start /wait "" %1"Certs\makecert.exe" -n "CN="%2 -pe -ss Root -sr LocalMachine -sky exchange -m 120 -a sha1 -len 2048 -r
您可以看到,它希望将两个参数传递到批处理文件中。第一个是文件夹地址,第二个是正在创建的证书的使用者名称。问题在于文件夹地址中有空格:C:\Program Files(x86)

启动批处理文件的代码如下所示:

private void UseBatchFile(string filePath, string parameters)
    {
        using (Process process = new Process()
        {
            StartInfo = new ProcessStartInfo()
            {
                UseShellExecute = false,
                CreateNoWindow = true,
                FileName = filePath,
                Arguments = parameters,
            }
        })
        {
            process.Start();
            process.WaitForExit();
        }
    }
传入的参数如下所示:

"C:\\Program Files (x86)\\ TestCA"
this.UseBatchFile(string.Format("{0}{1}", PathName, @"Certs\CACert.bat"), string.Format("{0} {1}", PathName, "TestCA"));
批处理文件将在C:\程序中读取,作为解析为的第一个参数

C:\ProgramCerts\makecert.exe
我已尝试将字符串参数地址括在“”中,并在批处理文件中使用%%1删除引号。这也没有任何作用。 我无法使用%1%2%3创建完整地址,因为其他文件路径可以插入此批处理文件

如何将地址作为一个参数传递

编辑:正在按如下方式调用该方法:

"C:\\Program Files (x86)\\ TestCA"
this.UseBatchFile(string.Format("{0}{1}", PathName, @"Certs\CACert.bat"), string.Format("{0} {1}", PathName, "TestCA"));

路径名为:C:\Program Files(x86)

首先,替换此:

string.Format("{0}{1}", PathName, @"Certs\CACert.bat")
为此:

Path.Combine(PathName, @"Certs\CACert.bat")
以下是Windows如何处理这些命令行参数的参考,包括许多示例:


很难说问题出在哪里。你能告诉我你是如何调用这个方法的吗?您可能还需要将%1放在报价中,但您可能会遇到报价地狱和安全问题?@lc。使用调用方法的方式编辑了答案。使用了错误的参数组合。传递包含“”的参数并仅使用%1而不使用~修复了此问题。在发送到批处理文件之前,它看起来像字符串格式的“\”C:\\ProgramFiles(x86)\\\\\”TestCA。