Имам следния скрипт в 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
") в командния ред.
Актуализация
Изглежда, че работи в console. Една ISE грешка?
Отговори:
4 за отговор № 1В ISE тук-низът трябва да бъде разделен чрез a връщане на каретата, последвано от нова линия на powerhell, като този:
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;
обаче в powerhell конзолата ние получаваме
asciitohex $t
%#x78;%#x78;%#x78;%#x78;%#x2E;%#x7A;%#x69;%#x70;%#xA;%#x79;%#x79;%#x79;%#x79;%#x2E;%#x7A;%#x69;%#x70;
3 за отговор № 2
Пример за работа както в ISE, така и в конзолата, като се използва нормален израз с -split
.
cd C:
@"
xxxx.zip
yyyy.zip
"@ -split "`r`n|`n" | % { echo ""$_""; test-path -path "$_" -EA Stop }
2 за отговор № 3
Сигурни ли сте, че точно този скрипт се изпълнява? Не мога да повторя проблема.
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}