我在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:Dataxxxx.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错误?
在ISE中,应该使用回车符和powershell新行来拆分here字符串,如下所示:
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字符串,我们得到:
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;
在ISE和控制台中使用带有-split
的正则表达式的示例。
cd C:
@"
xxxx.zip
yyyy.zip
"@ -split "`r`n|`n" | % { echo "'$_'"; test-path -path "$_" -EA Stop }
您确定这正是您正在执行的脚本吗?我无法复制这个问题。
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}