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

时间:2018-04-24 19:52:08

标签: c# interpolation

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

你可以像在命令行中那样在c#中执行此操作

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