带变量的UNC中无法识别的转义序列
本文关键字:识别 转义序列 变量 UNC | 更新日期: 2023-09-27 18:06:41
下面的代码给出了无法识别的转义序列错误,在代码中的两个反斜杠处为:'C$'temp
。
我尝试了双''
和""
,但仍然不起作用。
代码+ txtWSName.Text +
用于作为计算机名的变量。
txtFileDetails.Text = RunScript(@"Get-ChildItem '' " + txtWSName.Text + " 'C$'temp | Sort-Object -Property LastWriteTime -Descending");
我想做的是导航到目录并查看文件
如果有疑问,请阅读文档:
c#支持两种形式的字符串字面值:常规字符串字面值和逐字字符串字面值。一个常规字符串字面值由用双引号括起来的零个或多个字符组成,如"hello",并且可以包括简单的转义序列(如制表符的't)和十六进制和Unicode转义序列。
逐字字符串字面值由一个@字符后面跟着一个双引号字符、零个或多个字符以及一个结束双引号字符组成。一个简单的例子是@"hello"。在逐字字符串字面值中,分隔符之间的字符被逐字解释,唯一的例外是引号-转义序列。特别是,简单的转义序列以及十六进制和Unicode转义序列不会在逐字字符串字面量中处理。逐字字符串字面值可以跨越多行。
您希望在字符串字面量中使用反斜杠。这意味着您必须转义它们,或者在字符串前加上@
字符(就像您对第一个文字所做的那样):
@"Get-ChildItem '' " + txtWSName.Text + @" 'C$'temp ..."
或
"Get-ChildItem '''' " + txtWSName.Text + " ''C$''temp ..."
在此之上,您需要删除第一个字符串字面值的尾随空格,以及第二个字符串字面值的前导空格,否则您将以无效路径告终。
底线,改变这个:
txtFileDetails.Text = RunScript(@"Get-ChildItem ''" + txtWSName.Text + " 'C$'temp | Sort-Object -Property LastWriteTime -Descending");
这:
txtFileDetails.Text = RunScript(@"Get-ChildItem ''" + txtWSName.Text + @"'C$'temp | Sort-Object -Property LastWriteTime -Descending");
您在@"Get-ChildItem '' "
中有一个空格,这意味着''
被视为单独的参数。在" 'C$'temp"
中有另一个空格,顺便说一下,它将'
视为转义字符。
一般情况下,您应该在单独的行中构造您想要执行的字符串,以使调试更容易。执行结果也是如此。性能不会受到影响。
你应该试试:
var path = @"''" + txtWSName.Text + @"'C$'temp";
var script = "Get-ChildItem " + path +
" | sort-Object -property LastWriteTime -Descending";
var result = RunScript(script);
txtFileDetails.Text = result;
在c# 6中,你可以使用字符串插值,使代码更简洁,避免生成临时字符串,例如:
var server = txtWSName.Text;
var path = $@"''{server}'C$'temp";
var script = $"Get-ChildItem {path} | sort-Object -property LastWriteTime -Descending";