Powershell ISE在路径到测试路径时“路径中的非法字符”?

时间:2012-01-06 20:11:03

标签: powershell powershell-v2.0 powershell-ise

我在Powershell中有以下脚本 ISE

cd E:\Data
@"
xxxx.zip
yyyy.zip
"@ -split "`n" | % { echo "'$_'"; test-path -path "$_" -EA Stop }

然而,它总是会引起错误。

'xxxx.ZIP'
False
Illegal characters in path.
At line:175 char:27
+ % { echo "'$_'"; test-path <<<<  -path "$_" -EA Stop }
    + CategoryInfo          : InvalidArgument: (E:\Data\xxxx.ZIP:String) [Test-Path], ArgumentException
    + FullyQualifiedErrorId : ItemExistsArgumentError,Microsoft.PowerShell.Commands.TestPathCommand

但是,我可以在脚本中运行Test-Path -path xxxx.zip或硬编码'xxxx.zip',它运行正常。管道串的问题是什么?

更新

如果我将最后一个脚本更改为% { echo "'$_'"; "test-path -path $_ -EA Stop" }并将输出(“test-path -path xxxx.ZIP -EA Stop”)复制/粘贴到命令行。有用。

更新

它似乎在PowerShell控制台中有效。一个ISE错误?

3 个答案:

答案 0 :(得分:4)

在ISE中,here-string应使用回车后跟PowerShell新行进行拆分,如下所示:

cd E:\Data
@"
xxxx.zip
yyyy.zip
"@ -split "`r`n" | % { echo "'$_'"; test-path -path "$_" -EA Stop }

使用此功能时:

function asciiToHex($a)
{
$b = $a.ToCharArray();
Foreach ($element in $b) {$c = $c + "%#x" + [System.String]::Format("{0:X}",
[System.Convert]::ToUInt32($element)) + ";"}
$c
}

转换ise中的here-string:

asciitohex $t
%#x78;%#x78;%#x78;%#x78;%#x2E;%#x7A;%#x69;%#x70;%#xD;%#xA;%#x79;%#x79;%#x79;%#x79;%#x2E;%#x7A;%#x69;%#x70;

但是在powershell控制台中我们得到了

asciitohex $t
%#x78;%#x78;%#x78;%#x78;%#x2E;%#x7A;%#x69;%#x70;%#xA;%#x79;%#x79;%#x79;%#x79;%#x2E;%#x7A;%#x69;%#x70;

答案 1 :(得分:3)

使用带有-split的正则表达式在ISE和控制台中工作的示例。

cd C:\
@"
xxxx.zip
yyyy.zip
"@ -split "`r`n|`n" | % { echo "'$_'"; test-path -path "$_" -EA Stop }

答案 2 :(得分:2)

您确定这正是您正在执行的脚本吗?我不能复制这个问题。

NTCs>  @"
>> xxxx.zip
>> yyyy.zip
>> "@ -split "`n"|%{echo "'$_'";test-path -path "$_" -ea stop}
>>
'xxxx.zip'
False
'yyyy.zip'
False

<强>更新 要在ISE和控制台中工作,请在返回字符中添加问号(0或1次):

  @"
 xxxx.zip
 yyyy.zip
 "@ -split "`r?`n"|%{echo "'$_'";test-path -path "$_" -ea stop}