Solucionar y evitar el error de "Ruta demasiado larga" en Windows

Iniciado por rconde79, 1 Marzo 2011, 11:57 AM

0 Miembros y 2 Visitantes están viendo este tema.

rconde79

Buenas a todos.

Como ya sabréis, si en Windows se quiere copiar un archivo de una carpeta a otra y éste tiene una ruta que supera los 256 caracteres, salta el error de "Imposible copiar, ruta demasiado larga".

Este error se torna en caos en una oficina con red común y varios proyectos con muchas subcarpetas.

Lo peor, es que al saltar el error, deja de copiar. Esto supone que si por ejemplo, hay 20 archivos con ruta demasiado larga, tienes que copiar y pegar veinte veces para enterarte de cuáles son, para modificarlos.

Después de esta larga introducción voy al objetivo del post. Me pregunto si serían posible dos cosas:

1. Solución: alguna forma de ver TODOS los archivos con ruta demasiado larga de una carpeta (comprimirla  no funciona).

2. Evitarlo: alguna forma de que se avise al usuario que está creando un archivo cuya ruta es demasiado larga, y que en el futuro dará problemas.

Un saludo mákinas.

SuperDraco

Mediante la consola, quizás usando los nombres cortos, por ejemplo así:

copy file.txt c:\archiv~1\

para saber el nombre corto de un directorio:

dir /X


No se si solucionará el problema.

saludos
No he vuelto, solo estoy de paso.

rconde79

La verdad es que no se bien a qué te refieres. Tengo nivel básico de informática.

De todas maneras me pinta a que te refieres a una solución para un archivo. Yo me refiero a una solución general, a aplicar a carpetas llenas de subcarpetas.

Un saludo

suso11

A lo que el se refiere es que en windows se pueden usar los nombres cortos, tal y como se hacía en dos, es decir nombres de 8 caracteres como maximo.

La traducción de un nombre corto se realiza con 6 caracteres y ~1 detras.

Por ejemplo documents and setings se traduciria como DOCUME~1.

Es lo unico que se me ocurre a mi también ya que esta es una limitación de windows y no se si se puede subsanar de alguna manera.

un saludo!


RyogiShiki

#4
Hola, pues realmente me has dado una idea!

Acabo de hacer un Script en ruby que simplemente escribiendo el path del directorio que quieres verificar el buscará (recursivamente en todos sus archivos y subdirectorios) de ahí en adelante y te dira que rutas superan los 255 caracteres, es muy facil de usar, pero así mismo muy primitivo, así que no le pases parametros que no sirban porque no he considerado todas las excepciones.

Ahora implemento la función de renombrar el archivo cada qe encuentre un path tan largo

Requisitos: Tener Ruby claro está.

a continuación te lo dejo: http://www.mediafire.com/?xl59d3cg1nh8n1t

Path válidos:
CitarC:\
c:\Users\SomeUser\Projects
F:\lo\que\sea
En general cualquier path absoluto sirve, si el directorio o archivo no existe simplemente lanza un error y se sale del programa.

Saludos


RyogiShiki

#5
Bien alfin lo he terminado! la última versión del script que comprueba si el tamaño de un path es mayor a 256 caracteres, y si es así entonces te pregunta si quieres cambiar el nombre del archivo ahora solo falta implementar unas cuantas opciones para permitir el pase de parametros por la consola. Espero este Script sea de utilidad para alguien.

Source:
Código (ruby) [Seleccionar]
require 'find'

def dirComp(dir)
Dir.chdir(dir)
puts dir
Find.find(dir) do |path|
if(path.to_s.length > 256)
print "#{path} ... ||ERROR: Path mayor a 255 caracteres||\n"
print "Desea renombrar el archivo (s/n): "
op = gets.chomp.to_s
if (op == 's')
print "Escriba el nuevo nombre para el archivo: "
name = gets.chomp.to_s
oldName = cutPath(path)
File.rename(path, oldName + name)
else next
end
else puts "#{path} ... |OK|"
end
end
end

def cutPath(path)
index = -1
tmpVar = 0
while (tmpVar != 1) do
if (path[index].chr == "/" or path[index].chr == "\\" ) then
finalIndex = path.length - index.abs
oldName = path[0, (finalIndex + 1)]
tmpVar = 1
else
index = index - 1
end
end
return oldName
end

print "Escriba el path de un directorio: "
path = gets.chomp.to_s
dirComp(path)


Aquí el archivo: http://www.mediafire.com/?az6ouc6395cr12j
Mañana paso el Script en un exe para que funcione sin tener instalado Ruby




suso11


Randomize


RyogiShiki

Cita de: suso11 en  1 Marzo 2011, 22:42 PM
:xD gankutsuo espectacular! Jajajaja  ;-)

Cita de: Randomize en  1 Marzo 2011, 22:48 PM
Chapó gankutsuo, me quito el sombrero  ;)

grx! Justo lo acabo de pasar en mi máquina y encontré unos cuantos paths de ese tamaño que ya están bien!

Saludos


SuperDraco

No he vuelto, solo estoy de paso.