#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
параметра forGet-ChildItem
, когда на самом деле это не путь, а список файлов. Вы уверены, что вместо этого не следует использовать определенный путь, а вместо этого использовать-Include $inputpath
или даже заменить-Include
на-Filter
для немного большей скорости . Также я не уверен, что вамGet-ChildItem
вообще нужно, простоGet-Item
должно хватить. Кроме того, если у вас есть другие файлы, названные с использованием числовых базовых имен, вы должны знать, что usingSort-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
свойства (как и раньше), удаляем все нецифровые символы и, наконец, преобразуем полученную строку в целое число.