【问题标题】:Double quotes in arguments are ignored by ProcessStartInfoProcessStartInfo 忽略参数中的双引号
【发布时间】:2018-08-03 09:07:44
【问题描述】:

在 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);

lCommand 与之前显示的命令字符串相同。由于 \,引号被正确转义。

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

cmd 和 ProcessStartInfo 的解释有区别吗?

【问题讨论】:

  • 引号不会被忽略。他们根本不在那里。您的字符串不 包含 任何引号。无论如何调用都是错误的 - 您不需要需要调用 cmd.exe 来运行任何可执行文件,即使它是一个批处理文件。只需使用new ProcessStartInfo("C:\Program Files\Scripts_Talend\SynchroExo_run.bat", "--context_param FileCode=ABCD --context_param FilePath="....."`

标签: c# cmd talend processstartinfo


【解决方案1】:

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

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);

【讨论】:

    【解决方案2】:

    用一对 \" 包裹整个命令字符串使其工作。

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

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

    【讨论】:

    • 你只是掩盖了问题。您不需要首先使用cmd.exe,只需调用批处理即可。双引号也需要转义。您错过了参数中的双引号
    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 2013-10-31
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    相关资源
    最近更新 更多