C# NET中字符串varibale中的双引号不存在

C# NET中字符串varibale中的双引号不存在,c#,.net,cmd,double,C#,.net,Cmd,Double,我正在尝试从.NET执行cmd命令,并将find cmd命令用作管道。但是find cmd命令接受字符串中的值,但是当我创建字符串变量而不是双引号时,它将替换为/“” 我的字符串变量是“/c sc QUERY ServiceName | find \“START\”,而不是将“/c sc QUERY ServiceName | find“START”传递给它正在传递的cmd shell“/c sc QUERY ServiceName | find \“START\”,我的find命令失败 下面是

我正在尝试从.NET执行cmd命令,并将find cmd命令用作管道。但是find cmd命令接受字符串中的值,但是当我创建字符串变量而不是双引号时,它将替换为/“”

我的字符串变量是“/c sc QUERY ServiceName | find \“START\”,而不是将“/c sc QUERY ServiceName | find“START”传递给它正在传递的cmd shell“/c sc QUERY ServiceName | find \“START\”,我的find命令失败

下面是我的.NET代码

        string cmdstr = "/c sc QUERY ServiceName | find \"START\"";
        Process prc = new Process();
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = cmdstr;
        startInfo.RedirectStandardOutput = true;
        startInfo.UseShellExecute = false;
        prc.StartInfo = startInfo;

        prc.Start();

        string result;
        result = prc.StandardOutput.ReadToEnd();
        prc.WaitForExit(10);
调试代码时,cmdstr值不包含双引号,但包含\“

-希望它能起作用。

关于您的代码:
手动打开cmd.exe并键入sc QUERY ServiceName | find“START”
如果我将ServiceName更改为W32Time并开始运行,那么我甚至会得到一个非空结果(在我的机器上)。 关于调试器:
调试器向您显示字符串的未计算版本(即您在代码中实际键入的内容)。
如果您想查看带有已计算转义序列的字符串,则必须使用“文本快速查看”对话框(我不知道确切的英文标题):


是..在调试中,当悬停时,它将显示它们。在运行时,一旦计算..它们将不会被转义。您是否尝试过@/c sc QUERY ServiceName | find“START”";? 从这里@Damon:这只在OP没有的逐字字符串中起作用。他的字符串转义很好,问题一定是别的。@Simon:即使我也这么认为,这是一件很简单的事情,但实际上它没有转义/和不带双引号。为什么我这么说,是因为我的命令在cmd提示符下运行良好,但在.NET中,find命令文本字符串有\START\而find找不到。@Damon:我也试过,但在调试过程中,变量中出现了\并将其传递到cmd外壳,这应该做什么?它将双引号替换为零,有效地删除了它们。@DanielHilgarth您是否尝试过它,或者只是在未测试的情况下发表了评论?此代码是否删除了引号?请在结束之前运行它,然后再次阅读问题。我提供的输出是发问者在此处所需的输出。不正确。行
cmdstr=cmdstr.Replace(“\”,”);
删除
cmdstr
中的所有双引号。此外,OP希望将
/c sc QUERY ServiceName | find“START”
作为参数传递给
cmd.exe
。他不想传递
/c sc QUERY ServiceName | find START
 string cmdstr = string.Empty;
 cmdstr = "/c sc QUERY ServiceName | find \"START\"";
 cmdstr = cmdstr.Replace("\"", "");

cmdstr ="/c sc QUERY ServiceName | find START";