我正在尝试从.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值不包含双引号,但它包含\“
答案 0 :(得分:2)
关于你的代码:
它很好,相当于手动打开cmd.exe并输入 sc QUERY ServiceName |找到“开始”
如果我将 ServiceName 更改为 W32Time 并将 START 更改为 RUNNING ,那么我甚至会获得非空结果(在我的身上)机)。
关于调试器:
调试器显示字符串的未评估版本(即您实际在代码中键入的内容)
如果你想看到带有评估的转义序列的字符串,你必须使用“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";
- 希望它有效。