首页 > 解决方案 > 使用 C# 插值时如何处理变量中的空格?

问题描述

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

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

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

但是,一旦您遇到其中包含空格的路径,上面的命令就不再起作用,因为它无法找到该路径。通常,我会在包含空格的路径周围加上引号,以应对这种情况(在其他语言中,如 PowerShell)。你如何用 C# 插值做类似的事情。

标签: c#interpolation

解决方案


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

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

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();

推荐阅读