【问题标题】:Why this code works? These quotes don't make sense to me.为什么这段代码有效?这些引用对我来说没有意义。
【发布时间】:2018-05-05 14:47:33
【问题描述】:

如果我删除第一行中的第二个引号,它将不起作用。

  string command = "/C \"rmdir /q /s \\\\"+ hostname + "\\c$\\Users\\" + user;
            var psi = new System.Diagnostics.ProcessStartInfo("cmd.exe")
            {
                Arguments = command,
                UseShellExecute = false,
                CreateNoWindow = true
            };

            using (var process = System.Diagnostics.Process.Start(psi))
            {
                process.WaitForExit();
            }

【问题讨论】:

  • 好吧,那就不要删除它
  • @MickyD ,请查看此帖子的“TheClassic”答案,看看您的评论是否适合任何地方
  • @Saurabh 如果您太傻了,无法在明显写得不好的帖子中发现友好的嘲笑(在撰写本文时,帖子中有 3 个反对票),那么您应该阅读How to Ask.
  • @MickyD 亲爱的,非常感谢,我已经读过很多次了,它并没有说任何地方都可以盲目遵守规则。

标签: c# cmd command


【解决方案1】:

在字符前放置一个斜杠表示后面的字符应该按字面意思解释,而不是编译器符号。所以

\\

变成\,\"变成"。斜杠字符串在字符串中加上引号。命令字符串被有效地设置为(这就是 print(command) 的样子:

/C "rmdir /q /s \\hostname\c$\Users\user

假设 hostname="hostname" 和 user="user"

这段代码的奇怪之处在于字符串中没有第二个右引号。

我希望它应该更像:

string command = "/C \"rmdir /q /s \\\\"+ hostname + "\\c$\\Users\\\"" + user;

这将添加一个结束引号。如果要删除 rmdir 之前的引号,也需要删除斜杠。

https://blogs.msdn.microsoft.com/csharpfaq/2004/03/12/what-character-escape-sequences-are-available/

【讨论】:

  • 删除引号和斜线有效。这更具可读性,谢谢!但我仍然不明白为什么第一种方法有效。
  • @JhonSimpson 因为它不是代码中的引号,而是字符串中的引号......看看如果你在我的回答中打印块中的字符串会发生什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 2023-04-01
相关资源
最近更新 更多