Чтобы предложить более PowerShell-идиоматическое решение:
# Sample input line.
$line = '80055555|Lastname|Firstname|AidYear|DCDOCS|D:\BDMS_UPLOAD\800123456_11-13-2018 14-35-53 PM_1.pdf'
# Split by '|', rearrange, then re-join with '|'
($line -split '\|')[0,4,1,2,3,5] -join '|'
Обратите внимание, что синтаксис индексации PowerShell (внутри [...]
) достаточно гибок, чтобы принять произвольный массив (список) из
Также обратите внимание, что операнд RHS -split
равен \|
, т. е. экранированный |
char., учитывая, что |
имеет там особое значение(потому что это интерпретируется как регулярное выражение ).
Чтобы сложить все вместе:
$File = 'c:\Names\Complete\complete.txt'
Get-Content $File | ForEach-Object {
($_ -split '\|')[0,4,1,2,3,5] -join '|'
} | Out-File -LiteralPath C:\Names\Complete\index.txt -Encoding ascii
Что касается то, что вы пытались :
$Arr = $File -split '|'
Прежде всего проблема заключается в том, что операция -split
применяется к входному пути к файлу , а не к содержимое файла .
Во-вторых, как отмечено выше, для разделения на литерал |
char., \|
должно быть передано -split
,поскольку он ожидает регулярное выражение (регулярное выражение).
Кроме того, вместо использования Out-File
внутри цикла с -Append
, более эффективно использовать один пиpeline с ForEach-Object
, как показано выше.