Powershell выдает ошибку «Имя файла или расширение слишком длинное» при предоставлении путей к файлам для собственной команды

С этой проблемой я сталкивался много раз, особенно при использовании собственных команд, созданных на Python.

Например, сегодня у меня есть серия изображений (около 700), и я хотел бы взять эти изображения и передать их встроенной команде img2pdf, чтобы вывести один PDF-документ.

Фрагмент путей к изображениям:

C:\Users\ralf\Documents\raw scans\volume 39\chapter 1\Page_1.png
C:\Users\ralf\Documents\raw scans\volume 39\chapter 1\Page_2.png
C:\Users\ralf\Documents\raw scans\volume 39\chapter 1\Page_3.png
C:\Users\ralf\Documents\raw scans\volume 39\chapter 1\Page_4.png
C:\Users\ralf\Documents\raw scans\volume 39\chapter 1\Page_5.png
C:\Users\ralf\Documents\raw scans\volume 39\chapter 1\Page_6.png
C:\Users\ralf\Documents\raw scans\volume 39\chapter 1\Page_7.png
...
C:\Users\ralf\Documents\raw scans\volume 39\chapter 1\Page_687.png

и команда:

$images = get-childitem -path 'C:\Users\ralf\Documents\raw scans\volume 39\chapter 1' | sort creation time
Img2PDF $images -o "chapter1.pdf"

но вышеизложенное терпит неудачу:

ResourceUnavailable: Program 'img2pdf.exe' failed to run: An error occurred trying to start process 'C:\Users\ralf\AppData\Local\Programs\Python\Python311\Scripts\img2pdf.exe' with working directory 'C:\Users\ralf\Documents\raw scans\volume 39\chapter 1'. The filename or extension is too long.At line:1 char:1

Если я просто передам пути для первых пяти изображений, команда сработает и документ будет создан. Иногда мне даже удается заставить его работать

  • Размещение изображений на c:\temp\Page_1.png, c:\temp\Page_2.png и т. д.
  • Затем вызываем image2pdf и проходим новые пути.
  • Наконец переместим их обратно в исходное место. Но это не идеально, и иногда я очень сильно все портю, и мне приходится это чистить.

Много раз я пытался решить эту проблему, однажды я последовал этому руководству и включил LongPathsEnabled в своем реестре, но после перезапуска это не дало никакого эффекта. он даже сейчас включен.

Эта проблема продолжает возникать в самые критические времена, и мне бы очень хотелось хоть раз с ней разобраться, спасибо за любую помощь.

Я думаю, вам нужно отправить ему полный путь и имена файлов, а не объекты fileinfo. Попробуйте Img2PDF $images.FullName. а еще недвижимости нет creation time.. Вы имели в виду LastWriteTime наверное? P.S. лучше также добавить переключатель -File к команде Get-ChildItem, чтобы исключить каталоги, которые он также может найти

Theo 04.04.2024 21:17

Простите, я хотел использовать свойство CreationTime, которое, по моему мнению, соответствует столбцу «Дата создания» в проводнике. Также PowerShell правильно передаст свойство FullName собственной команде. Что касается -file, я уверен, что в каталоге есть только файлы, но это хороший сигнал для тех, кто может найти эту страницу полезной позже.

Ralf_Reddings 04.04.2024 22:35

попробуйте добавить ` \\?\ ` к путям перед переходом к img2pdf

phuclv 05.04.2024 02:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Думаю, у меня есть простое решение, которое вы можете попробовать. Подключите диск к своей папке, обработайте файлы на основе подключенного диска, удалите сопоставление.

$tmpDrive = New-PSDrive -Name G -PSProvider FileSystem -Root 'C:\Users\ralf\Documents\raw scans\volume 39\chapter 1' -Persist
$images = get-childitem -path G:\ | sort LastWriteTime
Img2PDF $images -o "chapter1.pdf"
$tmpDrive | Remove-PSDrive

*Спасибо phuclv за предложение добавить -Persist.

Я попробовал это, в конечном итоге выдает ту же ошибку, о которой я упоминал в ОП. Это очень умное решение, но кажется, что попытка получить элементы на «PsDrive» просто возвращает путь, который разрешается в фактический «физический» путь. Выполнение get-childitem g:\ |% fullname возвращает пути, начинающиеся с C:\Users\ralf\..., а не с `g:`. Мне бы хотелось, чтобы это сработало, я мог бы придумать сотни вариантов его использования, лол.

Ralf_Reddings 04.04.2024 22:30

вам может понадобиться -Persist, чтобы сделать его более похожим на subst в cmd или на подключенный диск в проводнике: New-PSDrive -Name G -PSProvider "FileSystem" -Root 'C:\Users\ralf\Documents\raw scans\volume 39\chapter 1' -Persist. Но еще лучше, если вы создадите отдельный раздел и смонтируете его в папку NTFS или создадите символическую ссылку на другую папку

phuclv 05.04.2024 02:48

@phuclv с опцией -persist мне удалось это сделать. Я отметил это как ответ, хотя в нем ответ -persist отсутствует. Возможно, TheMadTechnician отредактирует свой ответ, включив в него -persist. В любом случае, спасибо вам обоим, я тоже учту предложение о папке/символической ссылке NTFS!

Ralf_Reddings 08.04.2024 01:13

Другие вопросы по теме