ProcessStartInfo会忽略参数中的双引号

时间:2018-02-23 10:24:20

标签: c# cmd talend processstartinfo

在cmd中输入以下命令时起作用:

"C:\Program Files\Scripts_Talend\SynchroExo_run.bat" --context_param FileCode=ABCD --context_param FilePath="//networkname/Folder/file.xls" --context_param ReportFilePath=""

但是当我使用ProcessStartInfo执行它时它不起作用:

ProcessStartInfo lTalendScriptInfo = new ProcessStartInfo("cmd.exe", "/c " + lCommand)
    {
        CreateNoWindow = true,
        UseShellExecute = false,
        RedirectStandardError = true,
        RedirectStandardOutput = true
    };
Process lTalendScriptProcess = Process.Start(lTalendScriptInfo);

l命令与之前显示的命令字符串相同。由于\。

,报价被正确转义

使用ProcessStartInfo时,错误为:'C:\ Program'无法识别为内部或外部命令,可运行程序或批处理文件 好像双引号被忽略了,第一个空格后面的部分就是参数。

cmd和ProcessStartInfo之间的解释是否存在差异?

2 个答案:

答案 0 :(得分:2)

您的字符串不包含任何引号。它只是:

C:\Program Files\Scripts_Talend\SynchroExo_run.bat

当您使用参数连接时,最终会得到一个无法执行的字符串。

在任何情况下,您都不需要调用cmd.exe来运行任何可执行文件或批处理,只需将路径作为参数传递给...可执行文件。这里不需要使用额外的字符串,因为参数需要一个路径:

var batchPath="C:\Program Files\Scripts_Talend\SynchroExo_run.bat";
var arguments = "--context_param FileCode=ABCD --context_param FilePath=\"//networkname/Folder/file.xls\" --context_param ReportFilePath=\"\"";

var procInfo= new ProcessStartInfo(batchPath, arguments)
{
    CreateNoWindow = true,
    UseShellExecute = false,
    RedirectStandardError = true,
    RedirectStandardOutput = true
};
var scriptProcess= Process.Start(procInfo);

答案 1 :(得分:0)

用一对“使它工作。

包装整个命令字符串。”

最后的命令字符串如下所示:

""C:\Program Files\Scripts_Talend\SynchroExo_run.bat" --context_param FileCode=ABCD --context_param FilePath="//networkname/Folder/file.xls" --context_param ReportFilePath="""