Получить / установить атрибуты файла в PowerShell, если путь \ имя файла длиннее 260 символов
Я ищу способ получения и установки атрибутов файлов (скрытых и только для чтения) в PowerShell для файлов, в которых объединенный путь и имя файла длиннее 260 символов. Я знаю, что классы.NET не поддерживают более длинные пути к файлам; Я уже попробовал это. Аттриб тоже не работает. Я получаю сообщение об ошибке "Неправильный формат параметра -". Точно так же Dir тоже не работает.
Я использую Robocopy для получения имен файлов. Робокопия не имеет проблем с длинными путями. Тем не менее, я не могу использовать Robocopy для получения / установки атрибутов, так как я просто использую режим списка /L Robocopy.
У кого-нибудь есть обходные пути для PowerShell?
Обновление:
subst
не поддерживает слишком длинные пути. Это, кажется, работает с частичными путями, хотя.
mklink
требует локальных томов.
net use
не поддерживает слишком длинные пути. Это, кажется, работает с частичными путями, хотя.
New-PSDrive
не поддерживает слишком длинные пути, даже частичные.
2 ответа
Я думаю, используя subst
Команда для обозначения пути как буквы диска стоит того. Он основан на старых временах DOS и до сих пор работает на Winndows,
subst k: c:\some\really\complex\path\with\too\many\subdirs\and\suff\...
Если subst
не работает, попробуйте открыть каталог рядом с файлом и получить к нему доступ по пути UNC.
Основываясь на ответе vonPryz и вашей идее использовать частичные пути, следующее работает, хотя это медленно и требует подавления ошибок:
subst m: 'Insert\a\complete\path\close\to\character\limit'
sleep 1
Push-Location 'm:\rest\of\path\to\the\file' -ErrorAction SilentlyContinue
Get-ChildItem | %{
attrib $_
}
subst m: /d
sleep 1
Этот ответ также использует SUBST, чтобы приблизиться к тому месту, где мы хотим быть; затем Push-Location устанавливает родительский каталог с длинными именами файлов как "текущий рабочий каталог", см. здесь. Push-Location жалуется на это, но в любом случае работает, поскольку Get-ChildItem и ATTRIB, кажется, работают с этим "текущим рабочим каталогом", а не анализируют весь путь, и в результате ATTRIB работает.