PowerShell Copy-Item PathTooLongException - PullRequest
       1

PowerShell Copy-Item PathTooLongException

0 голосов
/ 01 ноября 2018

У меня есть сценарий PowerShell, где мне нужно рекурсивно копировать в папку, заменяя все файлы в ней:

Copy-Item -Path $source -Destination $destination -Recurse -Force -Verbose

Поскольку некоторые файлы в папке назначения имеют путь, превышающий 260 символов, я получаю исключение PathTooLongException.

Я читал об этих возможных решениях:

  1. Использовать робокопию
    • Я скорее использую чистый PowerShell
  2. Включить длинные пути в реестре и групповой политике
    • требует, чтобы пользователь перезапустил свою консоль, и я также предпочитаю не изменять реестр пользователя.
  3. Используйте префикс \\?\ для путей

Как я уже сказал, я предпочитаю не использовать первые два, третье решение (\\?\) должно подойти для меня, но файлы на самом деле не копируются.

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

Есть идеи?

1 Ответ

0 голосов
/ 01 ноября 2018

Префикс \\?\ использует Unicode-версию Windows API, для этого нужно использовать LiteralPath параметр вместо Path:

Copy-Item -LiteralPath '\\?\C:\folder\subfolder' -Destination 'D:\folder'

Синтаксис для UNC-пути \\server\share\folder немного отличается \\?\UNC\server\share\folder

(Не относится конкретно к вам, но для дальнейшего использования, если кто-нибудь наткнется на этот ответ)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...