[перемещение моего комментария к ответу]
Я предложил, чтобы PDFtk записал выходной файл там, где вам нужно, вместо того, чтобы поместить его куда-то еще, а затем переместить, например. меняется на:
OUTPUT "$($_.Name | Split-Path -Parent)\$($_.Name | Split-Path -Leaf).pdf"
Причина, по которой ваш первоначальный подход с перемещением элементов и ваша попытка с $_.Directory.Parent
не сработали, заключается в том, что типов вы работаете с изменениями через ваш скрипт. Вопрос "что это за вещь?" это очень важно в PowerShell, потому что он очень небрежен при наборе текста, особенно когда вы используете $_
, потому что в названии нет ничего, что помогло бы показать, что происходит. (Используйте Get-Member
или $thing.GetTYpe()
, чтобы выяснить, что это за вещь).
gci
выводит [system.io.fileinfo]
объекты типа, они имеют информацию о файловой системе, такую как .Directory.Parent
и .FullName
и .DirectoryName
и более.
group DirectoryName
выводит [GroupInfo]
контейнеров, по одному для каждой группы. В этом типе нет ни одной части файловой системы, только имя группы и элементы группы.
Здесь:
$PDFtk $_.group CAT OUTPUT "$($_.Name)\..
$_.Group
- это все элементы в группе, а $_.Name
- это имя группы в виде [string]
.
$_.Directory.Parent
не работает, потому что [GroupInfo]
не хватает информации о файловой системе, только это есть в группе.
Ваш первый подход с move-item
имеет такую же проблему:
| % {mv $_.FullName $_.Directory.Parent.FullName }
$_
- каждая строка текста, выходящая из PDFtk. Я не знаю, как это выглядит, но это, вероятно, что-то вроде сообщений о состоянии, типа «обработка файлов, найдено 10 страниц, запись выходного файла», все это будут строки текста [string]
типа и не содержат файловой системы. знать информацию из ранее в конвейере.