0

我正在尝试从 .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 值不包含双引号,但它包含 \"

4

2 回答 2

2

关于您的代码:
这很好,相当于手动打开 cmd.exe 并键入sc QUERY ServiceName | 找到“START”
如果我将ServiceName更改为W32Time并将START更改为RUNNING,那么我什至会得到一个非空结果(在我的机器上)。

关于调试器:
调试器向您显示字符串的未评估版本(即您在代码中实际键入的内容)。
如果您想查看带有评估转义序列的字符串,则必须使用“Text-Quickview”-Dialog(我不知道确切的英文标题):
打开文本快速查看对话框按钮
文本-​​快速浏览-对话框

于 2013-08-05T12:41:45.563 回答
0
 string cmdstr = string.Empty;
 cmdstr = "/c sc QUERY ServiceName | find \"START\"";
 cmdstr = cmdstr.Replace("\"", "");

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

-希望它有效。

于 2013-08-05T11:36:27.870 回答