将参数传递给批处理文件,其中包含空格

时间:2014-09-17 10:05:11

标签: 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 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"

批处理文件将在C:\ Program中读取,因为它的第一个参数解析为

C:\ProgramCerts\makecert.exe

我已经尝试将字符串参数地址括在'''并在批处理文件中使用%~1来删除引号。这也没有做任何事情。 我无法使用%1%2%3来创建完整地址,因为其他文件路径可以被导入此批处理文件。

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

编辑:该方法的调用如下:

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

PathName为:C:\ Program Files(x86)

1 个答案:

答案 0 :(得分:1)

首先,替换它:

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

用这个:

Path.Combine(PathName, @"Certs\CACert.bat")

以下是Windows如何处理这些命令行参数的参考,包括许多示例:

Parsing C++ Command-Line Arguments (MSDN)