2012-01-06 149 views
2

我在Powershell中有以下脚本ISEPowershell 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错误?

回答

4

在ISE在此处的字符串应该用拆分一个回车跟一个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我们得到:

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; 
+0

谢谢,这种差异真的很烦人。可以'-split'接受正则表达式,因此它可以在两种环境下工作吗? – ca9163d9 2012-01-06 23:05:35

+0

@NicW是的,检查我的更新回答 – mjsr 2012-01-06 23:44:51

+0

@NickW是的,它可以。我在我的答案中举了一个例子。乔恩做了所有的辛勤工作,所以他应该在这里接受答案,但随时可以upvote ;-) – 2012-01-06 23:49:43

2

你确定这正是你正在执行的脚本吗?我无法复制这个问题。

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

更新 要在ISE和控制台工作,把回车符一个问题符号(0或1 ocurrence):

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

我正在运行这些使用Powershell ISE。你在ISE试用过吗? – ca9163d9 2012-01-06 20:51:19

+0

你是对的,它只发生在ISE。这一定是因为编辑在每一行的末尾都加上了这个可笑的角色。感谢上帝的控制台不要这样做,D – mjsr 2012-01-06 23:10:42

3

一个例子上班在ISE和控制台中使用正则表达式与-split

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