.NET中的String变量中的双引号不会出现

时间:2013-08-05 10:47:39

标签: 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代码

        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值不包含双引号,但它包含\“

2 个答案:

答案 0 :(得分:2)

关于你的代码:
它很好,相当于手动打开cmd.exe并输入 sc QUERY ServiceName |找到“开始”
如果我将 ServiceName 更改为 W32Time 并将 START 更改为 RUNNING ,那么我甚至会获得非空结果(在我的身上)机)。

关于调试器:
调试器显示字符串的未评估版本(即您实际在代码中键入的内容) 如果你想看到带有评估的转义序列的字符串,你必须使用“Text-Quickview”-Dialog(我不知道英文的确切标题):
Open-Text-Quickview-Dialog-Button
Text-Quickview-Dialog

答案 1 :(得分:0)

 string cmdstr = string.Empty;
 cmdstr = "/c sc QUERY ServiceName | find \"START\"";
 cmdstr = cmdstr.Replace("\"", "");

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

- 希望它有效。