Як видалити файл у Windows із занадто довгим ім'ям файлу? [дублікат]


202

У моєї дружини є декілька файлів і папок, які так чи інакше мали імена файлів, які спричинили їх неподання (неможливо видалити) звичайними засобами або за допомогою командного рядка. Я вважаю, що імена файлів занадто довгі через глибину структур папок. Хтось знає про гарну утиліту для очищення таких файлів?


Як були створені ці файли?
Нік

Вибачте за моє незнання з цієї теми, але чи не повинна Windows обробляти ці файли? Чи не повинно те, що буде розміщено Еддіном, автоматично робиться Windows (навіть від Explorer)?
Стефанос Каланціс

2
@ Mokubai- Дублікат цього питання повинен бути позначений як дублікат цього, оскільки це питання старіше .
AStopher

1
@cybermonkey: І вона має кращу відповідь.
Ellesedil

Для наступних читачів метод 7zip з CTRL+DELETE - це найпростіший метод, на мою думку ...
Крістіан Голлхардт

Відповіді:


426

Коли ви хочете повністю видалити каталог, який містить довгі шляхи, robocopyробить ДУЖЕ хорошу роботу:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

Це працює, тому що роботокопія використовує\\?\ внутрішньо відомі Unicode версії функцій Win32 з префіксом до файлових шляхів ; ці функції мають обмеження 2¹⁶-1 (32 767) символів замість 259.

Можливо, вам доведеться пройти цей процес не один раз, щоб позбутися від усіх файлів.


1
Ефективний, коли у файловій системі немає короткого імені (8.3).
Антуан РОДРІГУЕЗ

1
Це добре працювало з моїми впертими файлами кешу Windows Store, які відмовились видаляти. Дякую!
Самір

1
Мені довелося додати / очистити до лінії роботокопії, щоб це працювало, але це зробило трюк після цього
Actionshrimp

3
Робокопія - це те, що ввело мене в цей безлад, але мені ніколи не спало на думку використовувати Робокопію, щоб витягнути мене з неї. Чудова відповідь! Дякую!
Jay Michaud

2
@SarahofGaia, мені погано, це 2¹⁶ - 1 насправді
Бенуа

91

З командного рядка:

dir /X

Це перерахує ваші файли / папки у форматі коротких імен. Тоді використовуйте коротке ім’я саме так, як написано, щоб видалити файл:

del LONGF~1.txt

1
Мені це подобається, це приємне трохи бічного мислення.
Кол

Хоча я не можу гарантувати, що це спрацює в цьому випадку, я декілька разів використовував його для видалення папок, у яких в кінці є недійсні символи, які унеможливлюють їх видалення звичайними засобами.
Буде Еддінс

1
Це працює для файлів і папок у поточному каталозі, але якщо вам якимось чином вдасться опинитися всередині папки, шлях якої занадто довгий, це не допоможе. Наприклад, зараз я перебуваю в консолі на занадто довгому шляху і навіть не можу dirабо cd ...
Бобсон

1
@Bobson Якщо ви не можете dirвикористовувати це pushdзамість. Це працювало для мене.
BadHorsie

4
Це не працює з Windows 10, відображене ім'я файлу - довге
Loenix

53

Я прогресивно працюю на шляху, перейменуючи кожну послідовну батьківську папку на "1" і намагаюся видалити. Ви ефективно скорочуєте шлях кожен раз, і мені ніколи не довелося працювати над більш ніж 4 або 5 каталогами, поки я нарешті не зможу видалити всю структуру каталогів (що може бути, а може і не бути тим, що ви хочете). Ви можете це зробити і з останньої дочірньої папки, і працюйте вгору або вниз.


7
Це було єдине, що працювало на мене. Всі інші хитрощі, наведені тут і на інших форумах, таких як цей, не спрацювали.
Ендрю Арнотт

Це була єдина пропозиція, яка працювала як не дивно.
Нестор Ледон

Це працювало для мене, ярлик, який мені допоміг mv * 1 && cd 1. Це не спрацювало, коли в каталозі було декілька файлів, але в цей момент rm -rf *зазвичай робився трюк.
Олександр Варвейк

1
Не вдається це зробити в Windows 10 ... Перейменування кидає помилку "ім'я файлу на довгий"
Dawesi

3
Це не тільки вирішило проблему для мене, але й пояснює, як я закінчився проблемою. У мене, мабуть, був шлях, який знаходився біля межі, тоді я перейменував батьківську папку (до імені додав щось на зразок "резервного копіювання листопада 2016 року збереження"), який перемістив файли в папки над лімітом. Добре знати причину, а також рішення, хоча я знаю, що це може статися і іншими способами, я думаю, що це звичайний спосіб, як це трапляється з людьми.
eselk

13

У деяких програмах, включаючи командний рядок ( cmd.exe), ви можете подолати обмеження довжини файлу, встановивши повний шлях \\.\так:

\\. \ C: \ деякий каталог \ інший каталог \ файл із довгим ім'ям

3
не працює в Windows 10
Dawesi

спасибі, cmd спрацював із цим принадністю у Win7rm -rf \\directoryname
Філіп Прийд

13

Трюк, який я використав, щоб обминути обмеження довжини "повний шлях та ім'я файлу", щоб перемістити, скопіювати або видалити щось, щоб скоротити його шляхом "пробивання" на півдорозі (або більше) за допомогою зіставленого букви диска, що вказує на папку шлях вниз по стежці .

тож у вас є c: \ some \ long \ path ... \ і \ foo \ bar \ папки \ oldfiles \ myoldfile.txt.

Потім нанесіть довільну літеру диска десь уздовж шляху, щоб перший шматок шляху став лише декількома символами. Попередня умова - папка повинна знаходитись у загальній папці (яка може бути вже, якщо вона знаходиться на сервері, саме там мені потрібно було це зробити), а якщо її вже немає, то виберіть папку десь на шляху і поділитися ним. Залежно від вашого оточення та рівня параної, дозвольте всім змінювати доступ до спільної доступу до тих пір, поки дозволи NTFS досить обмежуючі. Якщо ви хочете, просто дозвольте змінювати права лише на власний обліковий запис.

Тепер перейдіть до спільної папки або до неї всередині та поділіться нею, або скористайтеся командним рядком наступним чином. Припустимо, ви поділилися папкою "foo" як "fooshare", тоді ви можете це зробити

net use x: \\mycomputername\fooshare\bar\folders /persistent:no

і диск X: тепер вказує безпосередньо на папки "папки" всередині цього спільного доступу, тому "x: \ oldfiles \ myoldfile.txt" зараз досить короткий.

("/ Стійкий: ні" означає, що це не переживе наступного перезавантаження та збиває з пантелику вас згодом. Не забудьте відмінити спільний доступ до своєї папки.)

Пам'ятайте, що ви не повинні ділити папку , яка містить файл обов'язково, якщо це вже всередині загальної папки ви можете просто карту через акцію і вкладені папки в цільової папку поруч з файлом , і працює відмінно.

Мені довелося використовувати цю техніку, роблячи масивну роботокопію між двома серверами, коли ми зрозуміли, що користувачі склали карту накопичувачів досить глибоко в структурі папок, тому вони змогли використовувати 255 символів звідти, але це перевищило загальну довжину шляху файлу при зверненні з локального кореня диска.


4
Ви можете уникнути спільного використання, скориставшись subst x: C:\Some\first\part\of\the\long\pathі після цього видалити дискsubst x: /d
mihi

1
Приємно спробувати, але коли у вас вкладені 10-ти папок k, це неможливо.
Джуліан Найт,

substТрюк , здається, працює добре, якщо ім'я файлу не так довго, щоб зробити його піти понад 260 символів , навіть в корені диска.
Стівен Чунг

Вам також не потрібно явно ділитися будь-якою папкою net use, ви можете використовувати спільні адміністраторські папки за замовчуванням:net use x: \\localhost\c$\bar\folders /persistent:no
kapex

9

Найпростіший спосіб, який я знайшов, - це завантажувати з живого компакт-диска ubuntu.

Як альтернативу, ви можете створити спільну папку на півдорозі, а потім нанести на неї мережевий диск і виконати видалення зі зібраної папки (навіть на тій же машині)


17
Смішно, як часто компакт-диск Ubuntu Live допоможе вирішити проблеми з Windows ^^
Ivo Flipse

1
Я помітив , що сам хитромудрий мережу спробувати живий компакт - диск, проблема файлової системи спробувати живий компакт - диск, корумповану таблицю розділів і т.д. і т.п. :-)
Col

Це єдине рішення, яке працювало на мене. Я люблю тебе, Linux! <3
Девід Фрай

1
Запустити bash з Windows. Не потрібен Linux. ;-) Крім того, якщо ви використовуєте Windows 10, просто встановіть "Підсистему Windows для Linux", в основному Windows використовує гачки ubuntu api, щоб виконати роботу ... утиліти, включаючи "apt, ssh, rsync, find, grep, awk, sed, сортування, xargs, md5sum, gpg, curl, wget, apache, mysql, python, perl, ruby, php, gcc, tar, vim, emacs, diff, patch та більшість десятків тисяч бінарних пакетів в архівах Ubuntu! "Це дуже повне середовище розробки Linux, яке, як правило, працює на Windows. Zdnet.com/article/ubuntu-and-bash-arrive-on-windows-10
Dawesi

cygwin - ще одна альтернатива запуску команд LINUX у Windows
atom88

5

Перейменуйте каталог вирізати / вставити файл десь в іншому місці, а потім видаліть його. Тут працює.

Або просто з командного рядка, якщо вам не здається, що ви переживаєте проблеми.


Це працює як шарм. Копайте там (для мене це були супер вкладені node_modulesпапки), перетягніть його на робочий стіл і видаліть подалі. Промийте та повторіть, піднімаючи кілька папок одночасно. Яка неприємна проблема.
nickb

7
Для мене це не спрацювало - операція вставки не вдалася через довге ім'я файлу - не має значення, де її вирізати.
UpTheCreek

1

Можливо, це не найкращий спосіб, і мені цікаво подивитися, що придумують інші -

У мене це було один раз, і я спробував кілька речей без жодної удачі. Замість того, щоб шукати хороший інструмент, я перезапустив диск Windows, перейшов до консолі відновлення і просто видалив її звідти. Працював перший раз і справді добре!

Крім того, щойно Google зробив для вас і виявив це - DelinvFile виглядає добре, але не може за це поручитися.

Редагувати - Попередження! Щойно вищеперелічене - це лише випробування.


Безкоштовний римраф працює чудово і спрацював, коли всі інші ідеї провалилися. Це вимагає node.js
Джуліан Найт,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.