1

У меня есть несколько папок, которые при попытке поиска в них говорят:"<directory> refers to a location that is unavailable" . В Process Monitor я вижу, что фактический код ошибки - NAME_NOT_FOUND но они присутствуют.

  • chkdsk находит ошибок в файловой системе.
  • Они не являются ни переходами, ни символическими ссылками (проверяется установкой расширения Shell Shell)

Я заметил, что имена имеют общую черту:

  • все они имеют точку в конце
  • в прошлом я испытывал то же самое с файлами / каталогами со сломанными именами, как на картинке:

сломанные имена папок. источник: https://answers.microsoft.com/en-us/windows/forum/windows_7-files/fnew-folder-refers-to-a-location-that-is/fd41d220-8183-4e19-9250-356dc1d66656

Что здесь происходит и как мне это исправить?

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

  • В отличие от del предложенного в этом вопросе, rename "<directory>" "<smth else>" приводит к тому же "File not found" .
  • Ни \\?\<path> работает (та же ошибка).

1 ответ1

1

Windows API "предварительно обрабатывает" пути перед передачей их ядру. Документация на это отрывочна: вместо этого в MSDN перечислены только сетевые ограничения. Особенно:

Не заканчивайте имя файла или каталога пробелом или точкой. Хотя базовая файловая система может поддерживать такие имена, оболочка Windows и пользовательский интерфейс этого не делают.

API-интерфейсы ввода-вывода Unicode, которые снимают ограничение MAX_PATH похоже, также пропускают эту предварительную обработку.


Итак, есть два способа исправления:

  • Используйте программу, которая использует API ввода-вывода Unicode под капотом. Варианты включают в себя:

  • Используйте имя 8.3 для доступа к файлу /dir:

    >dir /x
    <...>
    <DIR>          58B0~1       Для П.П.
    
    >rename 58B0~1 new_name
    

Используя "родной путь" - \\?\<full path> - здесь не помогает, потому что для некоторых встроенных команд cmd - по крайней мере, dir и rename - эти пути все еще подлежат предварительной обработке:

>dir "\\?\C:\Users\Me\Для П.П."
<...>
 Directory of \\?\C:\Users\Me\Для П.П

File Not Found

(обратите внимание на отсутствующую конечную точку в выходных данных).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .