как удалить файл в windows со слишком длинным именем файла?

<p>у моей жены есть несколько файлов и папок, которые каким-то образом оказались с именами файлов, из-за которых их невозможно было удалить (нельзя удалить) обычным способом или через командную строку. я считаю, что имена файлов слишком длинные из-за глубины структуры папок. кто-нибудь знает хорошую утилиту для очистки таких файлов?</p>

<p>если вы хотите полностью удалить каталог и он содержит длинные пути, <code>robocopy</code> делает очень хорошую работу:</p><pre><code>mkdir empty\_dir robocopy empty\_dir the\_dir\_to\_delete /mir rmdir empty\_dir rmdir the\_dir\_to\_delete </code></pre><p>это работает, потому что robocopy внутренне <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx#maxpath">использует unicode-совместимые версии функций win32 с префиксом <code>\\?\</code> для путей к файлам</a> ; эти функции имеют ограничение 2¹⁶1 (32 767) символов вместо 259.</p><p>возможно, вам придется пройти через этот процесс более одного раза, чтобы избавиться от всех файлов.</p>

<p>из командной строки:</p><pre><code>dir /x </code></pre><p>это перечислит ваши файлы/папки в формате короткого имени. затем используйте короткое имя в точности как написано, чтобы удалить файл:</p><pre><code>del longf~1.txt </code></pre>

<p>я прогрессивно продолжаю свой путь по пути, переименовывая каждую последующую родительскую папку в «1» и пытаясь удалить. вы эффективно сокращаете путь каждый раз, и мне никогда не приходилось работать с более чем 4 или 5 каталогами, пока я наконец не смогу удалить всю структуру каталогов (что может или не может быть тем, что вы хотите). вы также можете сделать это из последней дочерней папки и двигаться вверх или вниз.</p>

<p>в некоторых программах, включая командную строку (<code>cmd.exe</code>), можно обойти ограничение длины файла, добавив префикс полного пути к <code>\\.\</code>, например так:</p><pre>\\.\c:\некоторый каталог\другой каталог\файл с длинным именем</pre>

<p>хитрость, которую я использовал, чтобы обойти ограничение длины «полный путь и имя файла» для перемещения, копирования или удаления чего-либо, состоит в том, чтобы сократить его путем «взлома» на полпути (или более)<strong> с помощью сопоставленной буквы диска, указывающей на путь к папке </strong>.</p><p>так что у вас есть c:\some\long\path ...\и\foo\bar\folder\oldfiles\myoldfile.txt.</p><p>затем сопоставьте произвольную букву диска где-нибудь вдоль пути, чтобы длина первого фрагмента пути составляла всего несколько символов. предварительное условие - папка должна находиться в общей папке (что может быть уже, если она находится на сервере, где я должен был это сделать), и если ее еще нет, выберите папку где-нибудь в пути и поделиться этим. в зависимости от среды и уровня паранойи, разрешите всем изменять доступ к общему ресурсу, если разрешения ntfs достаточно ограничены. если хотите, просто разрешите изменять права только для своей учетной записи.</p><p>теперь перейдите в общую папку или папку внутри нее и поделитесь ею или используйте командную строку следующим образом. предположим, вы использовали общую папку «foo» как «fooshare», тогда вы можете сделать</p><pre><code>net use x: \\mycomputername\fooshare\bar\folders /persistent:no </code></pre><p>и диск x: теперь указывает непосредственно на папку «папки» внутри этого общего ресурса, поэтому «x:\oldfiles\myoldfile.txt» теперь довольно короткий.</p><p>(«/ persistent: no» означает, что это не переживет следующую перезагрузку и не запутает вас в дальнейшем. не забудьте отключить общий доступ к своей папке, когда закончите.)</p><p>помните, что вам необязательно предоставлять общий доступ к папке, содержащей файл, если она уже находится в общей папке, вы можете просто сопоставить<em> через </em>общую папку и вложенные папки с целевой папкой<em> рядом </em>к файлу, и это прекрасно работает.</p><p>мне пришлось использовать эту технику, чтобы выполнить массовую робокопию между двумя серверами, когда мы поняли, что пользователи подключили диски достаточно глубоко в структуре папок, поэтому они смогли использовать оттуда 255 символов, но это превысило общую длину пути к файлу при доступе с локального диска root.</p>

<p>самый простой способ, который я нашел, это загрузиться с живого cd с ubuntu.</p><p>в качестве альтернативы вы можете создать общую папку на полпути по пути, а затем подключить к ней сетевой диск и выполнить удаление из сопоставленной папки (даже на той же машине)</p>

<p>переименуйте каталог вырезать/вставить файл в другом месте, а затем удалите его. работает здесь.</p><p>или просто из командной строки, если вы не хотите проходить через неприятности.</p>

<p>наверное, не самый лучший способ, и мне интересно посмотреть, что придут другие -</p><p>у меня было это однажды, и я попробовал несколько вещей без какой-либо удачи. вместо того, чтобы искать хороший инструмент, я перезапустил диск windows, зашел в консоль восстановления и просто удалил ее оттуда. работал первый раз и действительно хорошо!</p><p>кроме того, только что сделал google для вас и нашел это - <a href="http://www.purgeie.com/delinv/">delinvfile</a> выглядит хорошо, но не могу ручаться за это.</p><p>редактировать - предупреждение, только что увиденное выше - всего лишь пробная версия - может быть, не так хорошо, как я думал!</p>