2009-09-23 15:56:39 +0000 2009-09-23 15:56:39 +0000
203
203

¿Cómo se borra un archivo en Windows con un nombre de archivo demasiado largo?

Mi esposa tiene varios archivos y carpetas que de alguna manera terminaron teniendo nombres de archivo que han hecho que no se puedan borrar (no se pueden borrar) por medios normales o por 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 conoce una buena utilidad para limpiar archivos como este?

Respuestas (8)

428
428
428
2012-08-29 13:38:16 +0000

Cuando se quiere eliminar completamente un directorio y éste contiene rutas largas, robocopy hace un MUY buen trabajo:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

Esto funciona porque robocopy internamente [ usa las versiones de las funciones de Win32 que son conscientes de Unicode, con el prefijo \?Cuando se quiere eliminar completamente un directorio y éste contiene rutas largas,robocopy` hace un MUY buen trabajo:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

Esto funciona porque robocopy internamente usa las versiones de las funciones de Win32 que son conscientes de Unicode, con el prefijo para las rutas de archivos ; esas funciones tienen un límite de 2¹⁶-1 (32.767) caracteres en lugar de 259.

Puede que tengas que pasar por este proceso más de una vez para deshacerte de todos los archivos.

91
91
91
2009-09-23 16:01:40 +0000

Desde una línea de comandos:

dir /X

Esto listará sus archivos/carpetas en formato de nombre corto. Luego usa el nombre corto exactamente como está escrito para borrar el archivo:

del LONGF~1.txt
53
53
53
2009-09-23 17:40:55 +0000

Progresivamente me voy abriendo camino en la ruta, renombrando cada carpeta matriz sucesiva a “1” e intentando borrarla. En efecto, cada vez que acortas la ruta, nunca he tenido que trabajar en más de 4 o 5 directorios hasta que finalmente soy capaz de borrar toda la estructura de directorios (que puede o no ser lo que quieres). Podrías hacer esto desde el último directorio secundario también y trabajar hacia arriba o hacia abajo.

13
13
13
2009-09-23 16:12:29 +0000

En algunos programas, incluyendo el Command Prompt (cmd.exe), puedes evitar el límite de la longitud del archivo anteponiendo el prefijo \.En algunos programas, incluyendo el Command Prompt (cmd.exe`), puedes evitar el límite de la longitud del archivo anteponiendo el prefijo a la ruta completa de la siguiente manera:

\.\C:\some directory\other directory\a file with long name
13
13
13
2012-02-21 17:18:15 +0000

Un truco que he utilizado para evitar la limitación de longitud de “ruta completa y nombre de archivo” para mover, copiar o borrar algo es acortarlo “entrando” por la mitad (o más) utilizando una letra de unidad mapeada que apunta a una carpeta en el camino.

así que tienes c:|alguna ruta larga… yoofbarfolders.|archivo antiguo.txt.

Entonces mapea una letra de unidad arbitraria a algún lugar a lo largo de la ruta para que el primer trozo de la ruta se convierta en sólo unos pocos caracteres de largo. Requisito previo - la carpeta debe estar en una carpeta compartida (que puede estar ya si está en un servidor, que es donde he necesitado hacer esto), y si no lo está ya, entonces elige una carpeta en algún lugar de la ruta y compártela. Dependiendo de su entorno y nivel de paranoia, permita que todos modifiquen el acceso al recurso compartido siempre que los permisos de NTFS sean razonablemente restrictivos. Si lo desea, sólo permita los derechos de modificación sólo a su propia cuenta.

Ahora vaya a la carpeta compartida o a una dentro de ella y compártala, o utilice la línea de comandos como se indica a continuación. Supongamos que la carpeta compartida “foo” es “fooshare”, entonces podría hacer

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

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

(El “/persistent:no” significa que esto no sobrevivirá al próximo reinicio y lo confundirá más adelante. No te olvides de des-compartir tu carpeta cuando termines)

Recuerda, no tienes que compartir la carpeta que contiene el archivo necesariamente, si ya está dentro de una carpeta compartida puedes simplemente mapear a través de la carpeta compartida y las carpetas anidadas a una carpeta de destino cerca del archivo y eso funciona bien.

He tenido 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 carpetas, por lo que habían podido usar 255 caracteres desde allí, pero eso excedía la longitud total de la ruta del archivo cuando se accedía desde la raíz de la unidad local.

9
9
9
2009-09-23 15:59:00 +0000

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

Como alternativa puedes crear una carpeta compartida a mitad de la ruta y luego mapear una unidad de red a eso y hacer el borrado desde la carpeta mapeada (incluso en la misma máquina)

5
5
5
2009-09-23 19:39:20 +0000

Renombrar el directorio de cortar/pegar el archivo en otro lugar, y luego borrarlo. Funciona aquí.

O simplemente desde el símbolo del sistema, si no te apetece pasar por el problema.

1
1
1
2009-09-23 16:00:00 +0000

Probablemente no es la mejor manera y estoy interesado en ver lo que los demás vienen con -

Tuve esto una vez y probé algunas cosas sin ninguna suerte. En lugar de buscar una buena herramienta, reinicié con el disco de Windows dentro, fui a la consola de recuperación y lo borré de allí. Funcionó la primera vez y muy bien!

También, acabo de hacer un Google para usted y encontré esto - DelinvFile Se ve bien pero no puedo dar fe de ello.

Editar - Advertencia, sólo visto lo anterior es sólo una prueba - Tal vez no tan bueno como pensé en un principio!