CMD与使用c#进程的引号(";)混淆
我所拥有的是一个命令,它被传递到cmd来执行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\” 就像我
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;