使用 C# 插值时如何处理变量中的空格?

How do you handle spaces in variables when using C# interpolation?

使用字符串插值,如何处理通过管道传输到命令中的包含空格的变量?例如,如果您有一个包含空格的变量(如 UNC 路径),您将如何处理?

当 "filePath" 变量(即 \ServerName\testfile.txt)中没有空格时,此代码有效:

System.Diagnostics.Process.Start("net.exe", $"use X: \{filePath} {pwd /USER:{usr}").WaitForExit();

但是,一旦遇到包含空格的路径,上面的命令就不再有效,因为它无法找到路径。通常,我会在包含空格的路径周围应用引号,以解决这个问题(在 PowerShell 等其他语言中)。你如何用 C# 插值做类似的事情。

您可以像在命令行中一样在 c# 中执行此操作

System.Diagnostics.Process.Start("net.exe", $"use X: \"\{filePath}\" {pwd /USER:{usr}").WaitForExit();

它与字符串插值没有任何关系,它与可执行文件如何解析命令行有关。包含空格的单个参数(如路径)应该用引号引起来,以便将它们视为一个参数而不是多个参数。

您可以通过使用反斜杠字符转义引号字符来在字符串中添加引号 (\"):

var filePath = @"\server\share\directory with spaces";
var usr = $"{Environment.UserDomainName}\{Environment.UserName}";

System.Diagnostics.Process
    .Start("net.exe", $"use X: \"{filePath}\" pwd /USER:{usr}")
    .WaitForExit();

这个也是没有字符串插值:

System.Diagnostics.Process
    .Start("net.exe", string.Format("use X: \"{0}\" pwd /USER:{1}", filePath, usr))
    .WaitForExit();