PowerShell объединенный вывод Get-ChildItem - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть рабочий скрипт, который ищет файлы с регулярным выражением.Сценарий возвращает 2 строки на файл: родительская папка naùe и имя файла (соответствующее регулярному выражению).

Get-ChildItem -Path "D:\test\" -Recurse -File |
  Where-Object { $_.BaseName -match '^[0-9]+$' } |
    ForEach-Object { $_.FullName -Split '\',-3,'SimpleMatch' } | 
     select -last 2 | 
       Out-File "D:\wim.txt"

Для определенной системы вывод в одной строке должен быть, например, объединен с \ илипохожий персонаж.Как мне этого добиться?

Большое спасибо!

1 Ответ

0 голосов
/ 26 ноября 2018
Get-ChildItem -Path D:\test -Recurse -File | 
  Where-Object { $_.BaseName -match '^[0-9]+$' } | 
    ForEach-Object { ($_.FullName -split '\\')[-2,-1] -join '\' } |                          #'
      Out-File D:\wim.txt
  • ($_.FullName -Split '\\')[-2,-1] извлекает последние 2 компонента из пути к файлу
  • и -join '\' объединяет их вместе.

Обратите внимание, чтокроме проблемы форматирования строки, ваша исходная команда не работает должным образом, поскольку | select -last 2 применяется к общему выходу , а не за соответствующий файл ;таким образом, даже если имеется несколько совпадающих файлов, вы всегда получите только родительский каталог и имя файла last соответствующего файла.

Поэтому указанная выше команда извлекаетпоследние 2 \ компоненты пути, разделенные внутри блока ForEach-Object , непосредственно в результате операции -split, так что 2 (соединенных) компонента возвращаются на файл .

Кроме того, -3 в $_.FullName -split '\', -3, 'SimpleMatch' не извлекает последние 3 токена;в настоящее время он фактически обрабатывается так же, как 0, что означает, что все результирующие токены возвращаются;учитывая, что -split по умолчанию использует регулярные выражения , а представление литерала \ требует экранирования, поскольку \\, $_.FullName -split '\', -3, 'SimpleMatch' совпадает с $_.FullName -split '\\', что и используется в приведенном выше решении.

Обратите внимание, что есть зеленое освещение -split улучшение , которое даст отрицательные <Max-substrings> значения новое значение в будущем, применяя текущую логику положительных чиселаналогично end входной строки;например, -3 будет означать: вернуть последние 2 компонента плюс все, что осталось от входной строки перед ними (с полученными токенами, все еще сообщаемыми слева направо).

...