Pregunta ¿Cómo eliminar un archivo en Windows con un nombre de archivo demasiado largo? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Mi esposa tiene varios archivos y carpetas que de alguna manera terminaron teniendo nombres de archivos que los han hecho irrecuperables (no se pueden eliminar) por medios normales o mediante la línea de comandos. Creo que los nombres de los archivos son demasiado largos debido a la profundidad de las estructuras de las carpetas. ¿Alguien sabe de una buena utilidad para limpiar archivos como este?


195


origen


¿Cómo se crearon estos archivos? - Nick
Perdón por mi ignorancia sobre este tema, pero ¿Windows no debería manejar estos archivos? ¿No debería Windows lo que hace automáticamente (incluso desde el explorador) lo que publicó Will Eddins? - Stefanos Kalantzis
@ Mokubai- La pregunta duplicada debe marcarse como duplicada de esta, como esta pregunta es más antigua. - cybermonkey
@cybermonkey: Y tiene una mejor respuesta. - Ellesedil
Para más lectores, el 7zip Método con CTRL + DELETE es el método más fácil en mi opinión ... - Christian Gollhardt


Respuestas:


Cuando desea eliminar por completo un directorio y tiene un archivo con nombres largos dentro de él, robocopy hace un MUY buen trabajo:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /s /mir
rmdir empty_dir
rmdir the_dir_to_delete

Esto funciona porque robocopy internamente utiliza las versiones de funciones Win32 con reconocimiento de Unicode, con el \\?\ prefijo para rutas de archivos; esas funciones tienen un límite de 2¹⁶-1 (32,767) caracteres en lugar de 259.

Es posible que deba realizar este proceso más de una vez para deshacerse de todos los archivos.


415



Eficiente cuando no hay shortname (8.3) almacenado en el sistema de archivos. - Antoine RODRIGUEZ
Esto funcionó muy bien con mi obstinada Windows Store archivos de caché que se negó a ser eliminado. ¡Gracias! - Samir
Tuve que agregar / purgar a la línea robocopy para que esto funcione, pero funcionó el truco después de eso - actionshrimp
Robocopy es lo que me metió en este lío, pero nunca se me ocurrió usar Robocopy para sacarme de allí. ¡Gran respuesta! ¡Gracias! - Jay Michaud
@SarahofGaia, mi mal, son 2¹⁶ - 1 en realidad - Benoit


Desde un símbolo del sistema:

dir /X

Esto mostrará una lista de sus archivos / carpetas en formato de nombre corto. Luego use el nombre corto exactamente como está escrito para eliminar el archivo:

del LONGF~1.txt

89



Me gusta ese, es un buen pensamiento lateral. - Col
Si bien no puedo garantizar que funcionará en este caso, lo he usado varias veces para eliminar carpetas que tienen caracteres no válidos al final que hacen que sea imposible eliminarlas por medios normales. - Will Eddins
Esto funciona para archivos y carpetas en el directorio actual, pero si de alguna manera logras encontrarte dentro una carpeta cuyo camino es demasiado largo, no ayudará. Por ejemplo, actualmente estoy en una consola en un camino demasiado largo y no puedo ni siquiera dir o cd ... - Bobson
@Bobson si no puedes dir utilizar pushd en lugar. Eso funcionó para mí. - BadHorsie
Esto no funciona con Windows 10, el nombre de archivo mostrado es el largo - Loenix


Avanzaré progresivamente hasta llegar a la ruta, renombrando cada carpeta principal sucesiva a "1" e intentando eliminarla. En realidad, estás acortando el camino cada vez y nunca he tenido que trabajar en más de 4 o 5 directorios hasta que finalmente puedo eliminar toda la estructura del directorio (que puede o no ser lo que deseas). También puedes hacer esto desde la última carpeta hija y subir o bajar.


51



Esto fue lo único que funcionó para mí. Todos los otros trucos dados aquí y en otros foros como este no funcionaron. - Andrew Arnott
Encantado de ayudar... - joeqwerty
Fue la única sugerencia que funcionó de manera extraña. - Nestor Ledon
No se puede hacer esto en Windows 10 ... cambiar el nombre arroja el error "filename to long" - Dawesi
Esto no solo me solucionó el problema, también explica cómo terminé con el problema en primer lugar. Debo haber tenido un camino que estaba cerca del límite, luego cambié el nombre de una carpeta principal (agregué algo así como "copia de seguridad de noviembre de 2016 guardar" en el nombre) que empujó los archivos en subcarpetas por encima del límite. Es bueno saber la causa y la solución, aunque sé que también puede ocurrir de otras maneras, creo que es una forma común de que les ocurra a las personas. - eselk


En algunos programas, incluido el símbolo del sistema (cmd.exe), puede desplazarse por el límite de longitud del archivo prefijando la ruta completa con \\.\ Me gusta esto:

\\. \ C: \ algún directorio \ otro directorio \ un archivo con nombre largo

13



no funciona en Windows 10 - Dawesi
gracias, cmd trabajó un encanto con esto en Win7 rm -rf \\directoryname - Philip Pryde


Un truco que he usado para eludir la limitación de longitud de "ruta completa y nombre de archivo" para mover, copiar o eliminar algo es acortarlo "interrumpiendo" a la mitad (o más) utilizando una letra de unidad asignada apuntando a una carpeta muy abajo en el camino.

por lo que tiene c: \ some \ long \ path ... \ y \ foo \ bar \ folders \ oldfiles \ myoldfile.txt.

A continuación, asigne una letra de unidad arbitraria a alguna parte de la ruta para que el primer fragmento de la ruta tenga solo unos pocos caracteres. Requisito previo: la carpeta debe estar en una carpeta compartida (que ya puede estar si está en un servidor, que es donde he necesitado hacer esto), y si no lo está, elija una carpeta en algún lugar de la ruta. y compartirlo. Dependiendo de su entorno y nivel de paranoia, permita que todos modifiquen el acceso al recurso siempre que los permisos NTFS sean razonablemente restrictivos. Si lo desea, solo permita modificar los derechos solo a su propia cuenta.

Ahora vaya a la carpeta compartida o una dentro y compártelo, o use la línea de comando de la siguiente manera. Supongamos que compartió la carpeta "foo" como "fooshare", entonces podría hacer

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

y el X: unidad ahora apunta directamente a la carpeta "carpetas" dentro de ese recurso compartido, por lo que "x: \ oldfiles \ myoldfile.txt" ahora es bastante corto.

(El "/ persistente: no" significa que esto no sobrevivirá al próximo reinicio y te confundirá más adelante. No olvides des-compartir tu carpeta cuando hayas terminado.)

Recuerde, no tiene que compartir necesariamente la carpeta que contiene el archivo, si ya está dentro de una carpeta compartida, puede asignar mediante el recurso compartido y las carpetas anidadas en una carpeta de destino cerca al archivo y eso funciona bien.

Tuve que usar esta técnica haciendo una robocopia masiva entre dos servidores cuando nos dimos cuenta de que los usuarios habían mapeado unidades bastante profundas en la estructura de la carpeta, por lo que habían podido usar 255 caracteres desde allí, pero eso excedía la longitud total del archivo. cuando se accede desde la raíz del disco local.


13



puedes evitar compartir utilizando subst x: C:\Some\first\part\of\the\long\path y luego eliminar la unidad con subst x: /d - mihi
Buen intento pero cuando tienes 10's de carpetas anidadas no es posible. - Julian Knight
los subst truco parece funcionar bien, siempre que el nombre de archivo no sea asi que siempre y cuando sea más de 260 caracteres, incluso en la raíz de una unidad. - Stephen Chung
Tampoco necesita compartir explícitamente ninguna carpeta con net use, puede usar los recursos compartidos de administrador predeterminados: net use x: \\localhost\c$\bar\folders /persistent:no - kapex


La forma más sencilla que he encontrado es arrancar desde un CD de ubuntu live.

Como alternativa, puede crear una carpeta compartida a mitad de camino y luego asignar una unidad de red a eso y hacer la eliminación desde la carpeta asignada (incluso en la misma máquina)


9



Es curioso con qué frecuencia un Ubuntu Live CD ayudará a solucionar problemas de Windows ^^ - Ivo Flipse♦
Me he dado cuenta de que yo mismo, la red dudosa prueba un CD en vivo, problema con el sistema de archivos prueba con un CD en vivo, tabla de partición corrupta etc. etc. :-) - Col
Esta es la única solución que funcionó para mí. Te amo, Linux! <3 - David Frye
Ejecute bash desde Windows No se requiere Linux. ;-) Además, si está ejecutando Windows 10, simplemente instale "Subsistema de Windows para Linux", básicamente Windows usa los ganchos de la API de ubuntu para realizar el trabajo ... utilidades que incluyen "apt, ssh, rsync, find, grep, awk, sed, ordenar, xargs, md5sum, gpg, curl, wget, apache, mysql, python, perl, ruby, php, gcc, alqu, vim, emacs, diff, parche y ¡la mayoría de las decenas de miles de paquetes binarios en los archivos de Ubuntu! "Este es un entorno de desarrollo de Linux muy completo que simplemente se ejecuta en Windows. zdnet.com/article/ubuntu-and-bash-arrive-on-windows-10 - Dawesi
cygwin es otra alternativa para ejecutar comandos LINUX en Windows - atom88


Cambie el nombre del directorio de cortar / pegar el archivo en otro lugar, luego bórrelo. Funciona aqui

O solo desde el símbolo del sistema, si no tiene ganas de pasar por el problema.


5



Esto funciona como un encanto. Excavar allí (para mí, estaba súper anidado node_modules carpetas), arrástrelo hacia su escritorio y elimínelo. Enjuague y repita a medida que sube algunas carpetas a la vez. Qué problema tan desagradable. - nickb
Esto no funcionó para mí, la operación de pegar falló debido al largo nombre de archivo, no importa dónde cortarlo. - UpTheCreek


Probablemente no sea la mejor manera y me interesa ver lo que otros piensan,

Tuve esto una vez y probé algunas cosas sin suerte. En lugar de buscar una buena herramienta, reinicié con el disco de Windows, fui a la consola de recuperación y simplemente la eliminé de allí. ¡Trabajó por primera vez y realmente bien!

Además, acabo de hacer un Google por ti y encontré esto: DelinvFile Se ve bien, pero no puede responder por ello.

Editar - Advertencia, acabo de ver lo anterior es solo una prueba - ¡Tal vez no tan bueno como pensé!


1



El rimraf libre funciona bien y funcionó cuando todas las otras ideas fallaron. Requiere node.js - Julian Knight