使用字符串插值,如何处理通过管道输入包含空格的命令的变量?例如,如果您有一个包含空格的变量(如UNC路径),您如何处理?
当" filePath"中没有空格时,此代码有效。变量(即; \ ServerName \ testfile.txt):
System.Diagnostics.Process.Start("net.exe", $"use X: \\{filePath} {pwd /USER:{usr}").WaitForExit();
但是,只要遇到包含空格的路径,上面的命令就不再有效,因为它无法找到路径。通常,我会在包含空格的路径周围应用引号来对抗此问题(在PowerShell等其他语言中)。你如何用C#插值做类似的事情。
答案 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();