CMD与使用c#进程的引号(";)混淆

CMD与使用c#进程的引号(";)混淆,c#,cmd,process,C#,Cmd,Process,我所拥有的是一个命令,它被传递到cmd来执行 string command = @"C:\Privat\Docs\programm.exe" + " " + "-k" + " " + "https://thisIsAnUrl/DoIt=" + argument; 参数必须如下所示:\“xx:xx:xx:xx\” 当我用这个命令执行它时,我将得到输出 C:\Privat\Docs\programm.exe-khttps://thisIsAnUrl/DoIt=\“xx:xx:xx:xx\” 就像我

我所拥有的是一个命令,它被传递到cmd来执行

string command = @"C:\Privat\Docs\programm.exe" + " " + "-k" + " " + "https://thisIsAnUrl/DoIt=" + argument;
参数必须如下所示:
\“xx:xx:xx:xx\”

当我用这个命令执行它时,我将得到输出
C:\Privat\Docs\programm.exe-khttps://thisIsAnUrl/DoIt=\“xx:xx:xx:xx\”
就像我想的那样

问题是:当目录包含空格(
C:\Privat\Do cs\programm.exe
)时,需要在目录中添加引号:

string command = @"""C:\Privat\Do cs\programm.exe""" + " " + "-k" + " " + "https://thisIsAnUrl/DoIt=" + argument;

然后,输出变成
“C:\Privat\Do cs\programm.exe”-khttps://thisIsAnUrl/DoIt=\“xx:xx:xx:xx\”
如果我直接在cmd中执行它,它工作得很好,但是如果我用这个代码通过c#调用cmd,我会得到一个错误,即命令被错误写入或找不到(虽然它是正确的,而且当我完全复制这个输出时,就像我说的,直接用cmd执行它,它工作得很好)

cmd混淆的是xx:xx:xx:xx:xx之前和之后的\“但是命令必须离开它们


我遗漏了什么?请帮助

我建议通过在您想要/必须转义的字符之前添加
^
来转义引号,如下链接所述

请参阅更多:

更新

只需在反斜杠
\
之前直接尝试它,您假定它会产生问题,因此类似于这样:
^“xx:xx:xx:xx^\”
。如果这不起作用,请尝试像这样转义双引号:
^“xx:xx:xx^\”
。或者第三个选项:只转义双引号:
\^“xx:xx:xx:xx>\^“

更新2

由于注释中接受了这一点,请执行以下操作:使您的代码如下所示:


+“”+“”https://thisIsAnUrl/DoIt=\“”+argument;

我认为在调用新进程时,您可能只需要分别设置
文件名
参数
属性

下面是我用来执行cmd.exe的一些C代码(注意这里使用的
/C
参数和其他引号)

这篇关于在c#中转义命令行参数的文章可能会解决您的问题


它包含有关.NET如何处理命令行参数转义序列的详细解释和一些示例。

“我发现一个错误,该命令被错误写入或未找到”-您能发布代码和确切的错误消息吗?@MathiasR.Jessen确切的错误消息(德语):Der Befehl\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\“最后,这就是问题所在problem@DavidPostill谢谢你纠正我在问题中的写作和形式错误,我明白你的意思,但实际上我不知道该把^非常感谢我它是这样工作的“^\\^”xx:xx:xx^\\\\^”,但现在我的新问题是:我要去的目录包含空格,比如说:C:\Privat\Do cs\programm.exe我这样写@“C:\Privat\Do cs\programm.exe”,但是cmd响应(翻译自德语):>命令“C:\Privat\Do”要么写错了,要么找不到围绕字符串。尝试在前后加上一个或多个单引号。如果我的答案解决了您最初发布的问题,请这样标记。最初的问题是/是目录路径中的空格(如果我没有清楚指出,请抱歉)我在路径之前和之后添加了另一对引号,但cmd给我的错误仍然与我在上一条评论中告诉你的相同(错误写入或未找到),请尝试在两侧使用单引号。->而不是在字符串中使用3个双引号,它应该是这样的:
@“'C:\Privat\Do cs\programm.exe'
@Shmosi如果你是指我的代码示例,我刚刚编辑了我的答案,并从参数字符串中添加了一个缺少的尾随引号。我剪切并粘贴了它,然后进行编译。另外,我猜你不需要添加后括号(转义)引号
\”
在您的参数中,即它应该是
C:\Privat\Docs\programm.exe-khttps://thisIsAnUrl/DoIt=“xx:xx:xx:xx”
string cmd7z = @"C:\Program Files\7-zip\7z.exe";
string filename = "filetodecompress.bz2";

var processDecompress = new Process()
{
    StartInfo = new ProcessStartInfo()
    {
        RedirectStandardOutput = true,
        RedirectStandardError = true,
        UseShellExecute = false,
        CreateNoWindow = true,
        FileName = "cmd.exe",
        Arguments = $"/c \"\"{cmd7z}\" e -so \"{filename}\"\""
    }
};

processDecompress.Start();
processDecompress.WaitForExit();
int returnCode = processDecompress.ExitCode;