具有变量的UNC中无法识别的转义序列

时间:2016-09-13 09:00:17

标签: c# powershell

以下代码在代码中为\C$\temp的两个反斜杠提供了无法识别的转义序列错误。

我尝试使用双\\"",但仍然无法正常工作。

代码+ txtWSName.Text +用于作为计算机名称的变量。

txtFileDetails.Text = RunScript(@"Get-ChildItem \\ " + txtWSName.Text + " \C$\temp | Sort-Object -Property LastWriteTime -Descending");

我要做的是导航到目录并查看文件。

2 个答案:

答案 0 :(得分:0)

如有疑问,请阅读documentation

  

C#支持两种形式的字符串文字:常规字符串文字和逐字字符串文字。

     

常规字符串文字由用双引号括起来的零个或多个字符组成,如" hello",并且可能包括简单的转义序列(例如用于制表符的\ t)和十六进制和Unicode逃逸序列。

     

逐字字符串文字由@字符后跟双引号字符,零个或多个字符以及结束双引号字符组成。一个简单的例子是@"你好"。在逐字字符串文字中,分隔符之间的字符是逐字解释的,唯一的例外是quote-escape-sequence。特别是,简单的转义序列和十六进制和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");

答案 1 :(得分:0)

<?php /** * [PHPFOX_HEADER] * * @copyright [PHPFOX_COPYRIGHT] * @author natio * @package PhpFox * @version $Id: cdn.sett.php.new 3956 2012-03-01 12:28:26Z Raymond_Benc $ */ defined('PHPFOX') or exit('NO DICE!'); $aServers = array( array( 'upload' => 'http://1.mydomain.com/', 'file' => 'http://1.mydomain.com/file/', 'key' => '123' ), array( 'upload' => 'http://2.mydomain.com/', 'file' => 'http://2.mydomain.com/file/', 'key' => '1234' ) ); ?>中有一个空格,这意味着@"Get-ChildItem \\ "被视为一个单独的参数。您在\\中有另一个空格,顺便说一下,它将" \C$\temp"视为转义字符。

通常,您应该在单独的行中构造要执行的字符串,以便更轻松地进行调试。执行结果也是如此。性能不会受到影响。

你应该尝试:

\

在C#6中,您可以使用字符串插值,使代码更清晰,避免生成临时字符串,例如:

var path   = @"\\" + txtWSName.Text + @"\C$\temp";
var script = "Get-ChildItem " + path + 
           " | sort-Object -property LastWriteTime -Descending";
var result = RunScript(script);
txtFileDetails.Text = result;