Что значит «Не удалось найти часть пути»? - PullRequest
0 голосов
/ 23 октября 2019

Есть ли ограничение на размер пути, который могут обрабатывать get-childitem и select-string? Если да, что является альтернативой?

Когда я запускаю следующую команду по пути:

PS E:\KINGSTON backup5\03 Learning\Softwares\Mathematica\Mathematica 12\Mathematica Directories Backup2\C,Users,atfai,AppData,Roaming,Mathematica\Paclets\Repository\SystemDocsUpdate1-12.0.0\Documentation\English\Workflows> get-childitem -recurse -filter "*.nb" -file | select-string -pattern ".*ProcessObject.*" -casesensitive

Я получаю следующую ошибку

select-string:Файл E: \ KINGSTON backup5 \ 03 Learning \ Softwares \ Mathematica \ Mathematica 12 \ Каталоги Mathematica Backup2 \ C, Пользователи, atfai, AppData, Роуминг, Mathematica \ Paclets \ Repository \ SystemDocsUpdate1-12.0.0 \ Документация \ English \ Рабочие процессы \ChangeTheStyleOfPointsInA2DScatterPlot.nb не может быть прочитан: не удалось найти часть пути 'E: \ KINGSTON backup5 \ 03 Learning \ Softwares \ Mathematica \ Mathematica 12 \ Mathematica Каталоги Backup2 \ C, пользователи, atfai, AppData, Roaming, Mathematica \ Paclets \Repository \ SystemDocsUpdate1-12.0.0 \ Документация \ Английский \ Workflows \ ChangeTheStyleOfPointsInA2DScatterPlot.nb». В строке: 1 символ: 47 + ... nb "-file | select-string -pattern". ProcessObject."-casesensitive ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~InInfo: InvalidArgument:(:) [Select-String], ArgumentException + FullyQualifiedErrorId: ProcessingFile, Microsoft.PowerShell.Commands.SelectStringCommand

Более того, если я выполню ту же команду по следующему пути:

PS E:\Computer Backup\Downloads - Current\Windows 10 Optimization\SoftwareDistribution.old3\Download\736aed4d238d4999f5ea5b04589077ed\Package_for_RollupFix~~amd64~~17134.677.1.6\x86_wcf-system.servicemodel_b03f5f7f11d50a3a_10.0.17134.254_none_d5ff175e12d127c0> get-childitem -recurse -filter "*.nb" -file | select-string -pattern ".*ProcessObject.*" -casesensitive

В этот раз я получаю сообщение об ошибке get-childitem

get-childitem: Не удалось найти часть пути 'E: \ Computer Backup \ Downloads - Current \ Optimization для Windows 10 \ SoftwareDistribution. old3 \ Download \ 736aed4d238d4999f5ea5b 04589077ed \ Package_for_RollupFix ~~ amd64 ~~ 17134.677.1.6 \ x86_wcf-system.servicemodel_b03f5f7f11d50a3a_10.0.17134.254_nelf: 1ede:| select-string -pattern ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: Ошибка чтения: (E: \ Computer Bac ... 5ff175e12d127c0: String) [Get-ChildItem], DirectoryNotFoundException + FullyQualifiedErrorId: DirIOError, Microsoft.PowerShell.Commands.GetChildItemCommand

Что означает «Не удалось найти часть пути»? Диск E имеет файловую систему NTFS, которая поддерживается Windows, поэтому его команды powershell должны быть в состоянии справиться с этим? Что здесь происходит?

Кстати, я могу получить доступ к обоим путям из проводника Windows и открыть файлы в блокноте. Таким образом, пути существуют, и файлы явно не повреждены или недоступны.

1 Ответ

0 голосов
/ 27 октября 2019

Проблема в том, что длинные пути не включены в вашей ОС, поэтому существует ограничение в 260 символов.

В зависимости от используемой версии Windows, это можно исправить, включивгрупповая политика Local Computer Policy > Computer Configuration > Administrative Templates > System > Filesystem > NTFS > Enable NTFS long paths.

Если у вас нет этой опции, изменение значения ключа реестра LongPathsEnabled в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem с 0 на 1 также будет работать.

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