PowerShell: как добавлять текстовые файлы по порядку?

#powershell

#powershell

Вопрос:

 $inputpath = 1.txt, 2.txt ....
  

Команда:

 Get-ChildItem -Path $inputpath* -Include *.txt | Sort-Object -Property Name | Get-Content | ForEach-Object { Add-Content -Path d:MergedFile.txt -Value "$_" }
  

В результате получается смешанный файл с дублированным содержимым и в случайном порядке. Как я могу добавить несколько файлов в новый файл, учитывая порядок исходных файлов?

Комментарии:

1. Похоже, вы используете $inputpath в качестве -Path параметра for Get-ChildItem , когда на самом деле это не путь, а список файлов. Вы уверены, что вместо этого не следует использовать определенный путь, а вместо этого использовать -Include $inputpath или даже заменить -Include на -Filter для немного большей скорости . Также я не уверен, что вам Get-ChildItem вообще нужно, просто Get-Item должно хватить. Кроме того, если у вас есть другие файлы, названные с использованием числовых базовых имен, вы должны знать, что using Sort-Object -Property Name отсортирует ваши файлы по алфавиту, а не по числовому порядку.

2. Чтобы прояснить мой комментарий выше, я бы предложил, возможно $inputfiles = @("1.txt", "2.txt", …) , следовать Get-Item -Path C:UsersGill-BatesDocuments* -Include $inputfiles | Sort-Object -Property Name | ForEach-Object { Out-File -FilePath D:mergedFile.txt -InputObject (Get-Content $_) -Append} . Не забывая изменять Sort-Object часть в соответствии с информацией в уже предоставленном ответе.

Ответ №1:

Когда вы сортируете по Name свойству файла, вы сортируете строковые значения, и результат будет отсортирован в алфавитном порядке, что означает 10 9 , например, идет впереди.

Если вы хотите выполнить сортировку по числовому значению, представленному строковым именем, вам придется явно указать Sort-Object , чтобы входные значения обрабатывались как таковые:

 Get-ChildItem ... | Sort-Object -Property {$_.Name -replace 'D' -as [int]} |...
  

В выражении свойства {$_.Name -replace 'D' -as [int]} мы берем значение Name свойства (как и раньше), удаляем все нецифровые символы и, наконец, преобразуем полученную строку в целое число.