Foro de elhacker.net

Sistemas Operativos => Windows => Mensaje iniciado por: rconde79 en 1 Marzo 2011, 11:57 am



Título: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: rconde79 en 1 Marzo 2011, 11:57 am
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.


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: SuperDraco en 1 Marzo 2011, 13:31 pm
Mediante la consola, quizás usando los nombres cortos, por ejemplo así:

Código:
copy file.txt c:\archiv~1\

para saber el nombre corto de un directorio:

Código:
dir /X

No se si solucionará el problema.

saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: rconde79 en 1 Marzo 2011, 16:47 pm
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


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: suso11 en 1 Marzo 2011, 17:35 pm
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!



Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 1 Marzo 2011, 17:50 pm
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:
Citar
C:\
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


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 1 Marzo 2011, 22:23 pm
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
  1. require 'find'
  2.  
  3. def dirComp(dir)
  4. Dir.chdir(dir)
  5. puts dir
  6. Find.find(dir) do |path|
  7. if(path.to_s.length > 256)
  8. print "#{path} ... ||ERROR: Path mayor a 255 caracteres||\n"
  9. print "Desea renombrar el archivo (s/n): "
  10. op = gets.chomp.to_s
  11. if (op == 's')
  12. print "Escriba el nuevo nombre para el archivo: "
  13. name = gets.chomp.to_s
  14. oldName = cutPath(path)
  15. File.rename(path, oldName + name)
  16. else next
  17. end
  18. else puts "#{path} ... |OK|"
  19. end
  20. end
  21. end
  22.  
  23. def cutPath(path)
  24. index = -1
  25. tmpVar = 0
  26. while (tmpVar != 1) do
  27. if (path[index].chr == "/" or path[index].chr == "\\" ) then
  28. finalIndex = path.length - index.abs
  29. oldName = path[0, (finalIndex + 1)]
  30. tmpVar = 1
  31. else
  32. index = index - 1
  33. end
  34. end
  35. return oldName
  36. end
  37.  
  38. print "Escriba el path de un directorio: "
  39. path = gets.chomp.to_s
  40. 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




Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: suso11 en 1 Marzo 2011, 22:42 pm
 :xD gankutsuo espectacular! Jajajaja  ;-)


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: Randomize en 1 Marzo 2011, 22:48 pm
Chapó gankutsuo, me quito el sombrero  ;)


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 1 Marzo 2011, 22:48 pm
:xD gankutsuo espectacular! Jajajaja  ;-)

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


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: SuperDraco en 2 Marzo 2011, 02:10 am
Pues si, gracias por subirlo para todos!

saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: rconde79 en 2 Marzo 2011, 07:57 am
Oye que el que ha abierto el tema tiene tambien un poco de mérito no? jejeje

No, ahora en serio, muchas gracias. A mi por lo menos me será de grandísima utilidad, y más si como dices, lo pasas en un exe para utilizar en windows, ya que yo no tengo el Ruby. Admito que ni lo conozco.

Sólo una pincelada. Creí leer ayer que sólo se podía pasar a las unidades C: y F: Si pudieras modificarlo para pasarlo a cualquier carpeta ubicada en cualquier unidad ya sería la perfección (no sé si será mucho pedir).

Gracias de nuevo!


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: SuperDraco en 2 Marzo 2011, 09:05 am
Oye y el programa trabaja solo en un directorio, o tambien en las sub carpetas? xD por ejemplo para mirar en TODO el discoduro, se puede?

(es una nueva idea que añado a la sugerencia de modificaciones de rconde XD)


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 2 Marzo 2011, 14:32 pm
El programa trabaja como mencioné recursivamente, lo que quiere decir que trabaja en subcarpetas también. El programa funciona para cualquier carpeta si le das la ruta de esa carpeta.

Lo único esque en las últimas pruebas que he hecho he tenido algunos problemas gracias al maldito Windows que no sabe como arreglarselas en algunas situaciones con esos paths, y menos cuando se hace recursivo el cambio.... voy a arreglar esos problemas cuanto antes.

Lo ideal en estos momentos para que no sufras ningún percance es... uhmm... imagino que usar un Live CD de alguna distro muy pequeña, montar el disco y analiza.

Voy a resolver los problemas que mencioné antes y lo paso.


Saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 2 Marzo 2011, 15:14 pm
Listo, Ya está hecho, ahora permíteme explicar el funcionamiento del Script:

Lo primero es el exe: http://www.mediafire.com/?957q8lr354arne0

Cuando lo tengas lo más conveniente es que lo dejes en la Raiz del Disco local C: (o el que sea que uses por defecto). Despues abres una consola CMD y escribes lo siguiente:
Código
  1. C:
y luego
Código
  1. dir.exe
Cuando lo hagas lo primero que verás es un mensaje como el siguiente:
Código
  1. Escriba el path de un directorio:
En donde puedes escribir el path de cualquier directorio.... cualquiera no importa cual sea o en que dico se encuenre la comprobación será recursiva lo que quiere decir que comprobará todos los niveles del path suministrado incluyendo todos los archivos y subdirectorios que se encuentren.. Si en algún momento se encuentra un ruta mayor a 256 caracteres te saldrá el siguiente mensaje:
Código
  1. ||ERROR: Path mayor a 255 caracteres||
  2. Desea renombrar el archivo (s/n):
en donde solo puedes introducir 's' o 'n' si introduces 'n' o cualquier otro caracter el programa continuara la comprobación sin cambiar nada, si de lo contrario colocas 's' aparecerá el siguiente mensaje:
Código
  1. Escriba el nuevo nombre para el archivo:
En donde tienes que escribir el nuevo nombre para el archivo. NOTA: El programa NO hace doble comprobación, así que asegurate que el nuevo nombre sea más corto. Si el nombre continua siendo más grande a 256 caracteres Windows no dejará cambiar el nombre (maldito Windows!!), Windows le pasara un error al programa y el programa terminara la ejecución.
Despues de que escribas el nombre y des 'Enter' el programa continuará con la ejecución.
Por cada path bien formado que se encuentre el programa te lo dirá con un:
Código
  1. ... | OK |

Y bueno creo que eso es todo lo que hay que decir si a alguien le interesa el Script con los pequeños cambios realizados aquí está:
Código
  1. require 'find'
  2.  
  3. def dirComp(dir)
  4. Dir.chdir(dir)
  5. puts dir
  6. Find.find(dir) do |path|
  7. if(path.to_s.length > 256)
  8. print "#{path} ... ||ERROR: Path mayor a 255 caracteres||\n"
  9. print "Desea renombrar el archivo (s/n): "
  10. op = gets.chomp.to_s
  11. if (op == 's')
  12. print "Escribe el nuevo nombre para el archivo: "
  13. name = gets.chomp.to_s
  14. oldName = cutPath(path)
  15. newName = oldName + name
  16. File.rename(path.gsub("/", "\\"), newName.gsub("/", "\\"))
  17. else next
  18. end
  19. else puts "#{path} ... |OK|"
  20. end
  21. end
  22. end
  23.  
  24. def cutPath(path)
  25. index = -1
  26. tmpVar = 0
  27. while (tmpVar != 1) do
  28. if (path[index].chr == "/" or path[index].chr == "\\" ) then
  29. finalIndex = path.length - index.abs
  30. oldName = path[0, (finalIndex + 1)]
  31. tmpVar = 1
  32. else
  33. index = index - 1
  34. end
  35. end
  36. return oldName
  37. end
  38.  
  39. print "Escriba el path de un directorio: "
  40. path = gets.chomp.to_s
  41. dirComp(path)

Ahora hay que tener en cuenta que este último ya no funciona sobre plataformas *nix gracias a Windows -.- pero siempre se puede usar el anterior (aunque como dije no tiene mucho sentido.)
Espero sea de Utilidad

POR ULTIMO: Si encuentran algún error (diferente a lo que mencione más arriba claro está) haganmelo saber para corregirlo.

Saludos.


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: SuperDraco en 2 Marzo 2011, 15:23 pm
Que gran utilidad! que grande eres xD deberias subirlo por ahí, a algunas paginas de renombre para que lo tengan más usuarios, o vender el programa xD.


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: rconde79 en 2 Marzo 2011, 16:46 pm
Buenísimo. Lo he utilizado y funciona a la perfección.

Sí que se podría difundir el programa. yo he buscado por internet y no hay ninguna solución a este fallo de windows.

Enhorabuena otra vez!

PD: manda wevos que hayamos llegado a la luna hace medio siglo y todavía no se puedan escribir rutas de más de 256 caracteres..


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 2 Marzo 2011, 16:51 pm
Buenísimo. Lo he utilizado y funciona a la perfección.

Sí que se podría difundir el programa. yo he buscado por internet y no hay ninguna solución a este fallo de windows.

Enhorabuena otra vez!

PD: manda wevos que hayamos llegado a la luna hace medio siglo y todavía no se puedan escribir rutas de más de 256 caracteres..

Jajajajajajajajaj Muy cierto!!
Bien, me alegra que haya funcionado de maravilla! Por fortuna este foro es relevante y de seguro alguien que busque en Google llegará a este hilo.
Y bueno pues ya saven yo sigo la folosofía libre, así que pueden copiarlo, modificarlo, regalarlo prestarlo.... si alguien quiere decir que lo hizo de cero sin darme crédito la verdad no me importa....


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: rconde79 en 2 Marzo 2011, 16:52 pm
Por cierto, otra sugerencia (por favor no me mates)

¿habría alguna forma de que el programa lanzara un archivo de texto con las rutas que ha encontrado erróneas, sin que se parara a preguntar si se quiere renombrar el archivo?

Es para pasarlo a una carpeta grande, olvidarte durante un rato, y después echar un vistazo al documento de texto.

Sólo es una sugerencia que se me ocurre. Repito que me parece fantástico el programa como está.

Saludos!


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 2 Marzo 2011, 16:54 pm
Por cierto, otra sugerencia (por favor no me mates)

¿habría alguna forma de que el programa lanzara un archivo de texto con las rutas que ha encontrado erróneas, sin que se parara a preguntar si se quiere renombrar el archivo?

Es para pasarlo a una carpeta grande, olvidarte durante un rato, y después echar un vistazo al documento de texto.

Sólo es una sugerencia que se me ocurre. Repito que me parece fantástico el programa como está.

Saludos!
Claro vamos que no hay bronca! además me ofrecí desde el principio para esto así que no importa, y claro, además es una modificación muy simple... esperame un rato a ver que sale.
Saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: SuperDraco en 2 Marzo 2011, 16:56 pm
no se si será posible, pero si gankutsuo le añade algún parametro, mira, algo asi quedaría, no?

Código:
@echo off
dir.exe c:\ > lista.txt & type lista.txt & del /q lista.txt
pause >nul
exit

animo!


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 2 Marzo 2011, 17:02 pm
no se si será posible, pero si gankutsuo le añade algún parametro, mira, algo asi quedaría, no?

Código:
@echo off
dir.exe c:\ > lista.txt & type.txt & del /q lista.txt
pause >nul
exit

animo!
Bueno, como verás yo soy más de GNU/Linux y me parecio interesante hacer un Script de estos, entiendo un poco el comando pero la verdad no lo entiendo del todo veo que guarda la salida del programa en lista.txt y type.txt pero no veo para que es el resto.

Saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: SuperDraco en 2 Marzo 2011, 17:05 pm
es como kedaría tu programa mas o menos si se ejecuta desde un .bat xD

lo guarda en lista.txt, luego se muestra la lista.txt, y luego se borra con "del"

pause es para pausar el batch, porque sino se cerraría.


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 2 Marzo 2011, 17:20 pm
Bueno el script que guarda las rutas en un archivo de texto sin preguntar nada es este.
Código
  1. require 'find'
  2.  
  3. def dirComp(dir)
  4. fileName = "C:" + "\\list.txt"
  5. File.open fileName, 'w'
  6. counter = 0
  7. Dir.chdir(dir)
  8. puts dir
  9. Find.find(dir) do |path|
  10. if(path.to_s.length > 256)
  11. print "#{path} ... ||ERROR: Path mayor a 255 caracteres||\n"
  12. File.open fileName, 'a+' do |file|
  13. file.write "#{path.gsub("/", "\\")}\n"
  14. counter = counter + 1
  15. end
  16. else puts "#{path} ... |OK|"
  17. end
  18. end
  19. if(counter == 0) then
  20. print "No se encontraron rutas incorrectas! ;) \n"
  21. else print "Se encontraron #{counter} rutas incorrectas, y fueron guardadas en #{fileName.gsub("/", "\\")} =(\n"
  22. end
  23. end
  24.  
  25. def cutPath(path)
  26. index = -1
  27. tmpVar = 0
  28. while (tmpVar != 1) do
  29. if (path[index].chr == "/" or path[index].chr == "\\" ) then
  30. finalIndex = path.length - index.abs
  31. oldName = path[0, (finalIndex + 1)]
  32. tmpVar = 1
  33. else
  34. index = index - 1
  35. end
  36. end
  37. return oldName
  38. end
  39.  
  40. print "Escriba el path de un directorio: "
  41. path = gets.chomp.to_s
  42. dirComp(path)
  43.  

En estos momentos me encuentro en Debian..... así que ya voy para Windows a crear el ejecutable, permanece pendiente que cuandotenga el exe edito este msg y lo pongo.

Saludos

-----
EDIT
-----

Listo, ya está hecho!... aquí dejo el nuevo exe: http://www.mediafire.com/?lhae2w358jx6zw9 (es el mismo que el que esta más abajito =))

Saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: rconde79 en 2 Marzo 2011, 17:36 pm
Gracias amigo.

Déjame decirte que da gusto encontrar gente como tú, ayuda totalmente desinteresada.

Lo veo poco probable porque como verás tengo nivel básico, pero si necesitas cualquier cosa sólo dilo.

Gracias y un saludo!


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: rconde79 en 2 Marzo 2011, 17:56 pm
Hola de nuevo.

He probado el programa en mi C: un par de veces, y me da el resultado de que ha encontrado 18 rutas incorrectas y las ha guardado en list.txt. Sin embargo, en el archivo de texto sólo se encuentra una.

¿Puede ser que tenga algún pequeño fallo el programa o soy yo que lo estoy utilizando mal?


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 2 Marzo 2011, 17:57 pm
Ahhh jajaja no es ningun falló es el parametro "w" que reescribe el archivo cada vez que encuentra una ruta!! jajaja no me habia fijado en eso. Gracias por reportarlo.

Corrigiendo...


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: Novlucker en 2 Marzo 2011, 17:58 pm
Bueno, la solución de gankutsuo es mucho más completa, pero dejo este otro por si a alguien le sirve de algo, a mi me llevó 3 minutos modificar un script anterior :xD

Código
  1. Set objfso = createobject("scripting.filesystemobject")
  2. Set IDir = objfso.getfolder(wscript.arguments(0))
  3. ListDirs(IDir)
  4.  
  5. Function ListDirs(IFol)
  6. if len(IFol.path)>256 then wscript.echo IFol.path
  7. Set SubsIFol = IFol.subfolders
  8.  
  9. On error resume next
  10. For each SF in SubsIFol
  11. ListDirs(SF)
  12. Next
  13. End Function

Es un vbscript, así que se copia en un notepad y se guarda con extensión vbs

Luego se ejecuta desde línea de comandos pasando como parámetro la ruta de la carpeta.
Código
  1. C:\>cscript /nologo elscript.vbs C:
Y si quieres exportarlo a un archivo lo haces simplemente redireccionando
Código
  1. C:\>cscript /nologo elscript.vbs C: > log.txt

Saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 2 Marzo 2011, 18:02 pm
Bueno, la solución de gankutsuo es mucho más completa, pero dejo este otro por si a alguien le sirve de algo, a mi me llevó 3 minutos modificar un script anterior :xD

Código
  1. Set objfso = createobject("scripting.filesystemobject")
  2. Set IDir = objfso.getfolder(wscript.arguments(0))
  3. ListDirs(IDir)
  4.  
  5. Function ListDirs(IFol)
  6. if len(IFol.path)>256 then wscript.echo IFol.path
  7. Set SubsIFol = IFol.subfolders
  8.  
  9. On error resume next
  10. For each SF in SubsIFol
  11. ListDirs(SF)
  12. Next
  13. End Function

Es un vbscript, así que se copia en un notepad y se guarda con extensión vbs

Luego se ejecuta desde línea de comandos pasando como parámetro la ruta de la carpeta.
Código
  1. C:\>cscript /nologo elscript.vbs C:
Y si quieres exportarlo a un archivo lo haces simplemente redireccionando
Código
  1. C:\>cscript /nologo elscript.vbs C: > log.txt

Saludos
Jeje graciaspor el aporte, también es una gran solución! y me alegra que la hayas puesto! despues de todo en la variedad está lo bueno eh!


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: SuperDraco en 2 Marzo 2011, 18:12 pm
Bueno, la solución de gankutsuo es mucho más completa, pero dejo este otro por si a alguien le sirve de algo, a mi me llevó 3 minutos modificar un script anterior :xD

Código
  1. Set objfso = createobject("scripting.filesystemobject")
  2. Set IDir = objfso.getfolder(wscript.arguments(0))
  3. ListDirs(IDir)
  4.  
  5. Function ListDirs(IFol)
  6. if len(IFol.path)>256 then wscript.echo IFol.path
  7. Set SubsIFol = IFol.subfolders
  8.  
  9. On error resume next
  10. For each SF in SubsIFol
  11. ListDirs(SF)
  12. Next
  13. End Function

Es un vbscript, así que se copia en un notepad y se guarda con extensión vbs

Luego se ejecuta desde línea de comandos pasando como parámetro la ruta de la carpeta.
Código
  1. C:\>cscript /nologo elscript.vbs C:
Y si quieres exportarlo a un archivo lo haces simplemente redireccionando
Código
  1. C:\>cscript /nologo elscript.vbs C: > log.txt

Saludos

Puto Novlucker!!!   y con perdón he!! pero siempre me sorprendes con tus vbs, casate conmigo xDD sabes que amo tus conocimientos no? ajjaja

Gracias a los 2!

(esperando la correción yo tambien ^^)


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 2 Marzo 2011, 18:28 pm
Listo ya está corregido: http://www.mediafire.com/?lhae2w358jx6zw9


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 2 Marzo 2011, 18:47 pm
Bueno, la solución de gankutsuo es mucho más completa, pero dejo este otro por si a alguien le sirve de algo, a mi me llevó 3 minutos modificar un script anterior :xD

Código
  1. Set objfso = createobject("scripting.filesystemobject")
  2. Set IDir = objfso.getfolder(wscript.arguments(0))
  3. ListDirs(IDir)
  4.  
  5. Function ListDirs(IFol)
  6. if len(IFol.path)>256 then wscript.echo IFol.path
  7. Set SubsIFol = IFol.subfolders
  8.  
  9. On error resume next
  10. For each SF in SubsIFol
  11. ListDirs(SF)
  12. Next
  13. End Function

Es un vbscript, así que se copia en un notepad y se guarda con extensión vbs

Luego se ejecuta desde línea de comandos pasando como parámetro la ruta de la carpeta.
Código
  1. C:\>cscript /nologo elscript.vbs C:
Y si quieres exportarlo a un archivo lo haces simplemente redireccionando
Código
  1. C:\>cscript /nologo elscript.vbs C: > log.txt

Saludos

Queria hacer unas preguntas porque no lo he podido ejecutar:

Cuando pongo:
Código
  1. C:\>cscript /nologo elscript.vbs C:
Me devuelve:
Código
  1. "cscript" no se reconoce como un comando interno o externo,
  2. programa o archivo por lotes ejecutable.

y Cuando lo ejecuto así solo pasandole una carpeta obtengo:
(http://i51.tinypic.com/10zaiwo.jpg)

Porque viene siendo?

Saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: SuperDraco en 2 Marzo 2011, 18:52 pm
jaja!!! por fin llega el dia que me toca corregir un script del gran Nov...

XD que va, es broma, está bien, lo que pasa es que parece que no tienes cscript? estas bajo windows ahora? xD que version?

para corrar el vbscript, o le pinchas 2 veces click, o como dice Nov sería mediante "cscript.exe", esté debería estar en c:\windows\system32\cscript.exe"

Código:
@echo off
c:\windows\system32\cscript.exe elarchivobs.vbs

no entiendo mucho de vbs pero parece que el script solo se puede ejecutar como dijo nov, mediante el cscript... :S por algo lo habrá dicho, luego lo pruebo yo a ver que tal


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: SuperDraco en 2 Marzo 2011, 18:59 pm
no habrás puesto directamente esto asi, verdad?:

C:\>cscript /nologo elscript.vbs C:



ponlo así:

cscript /nologo elscript.vbs C:


(por si acaso...)


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: Novlucker en 2 Marzo 2011, 19:17 pm
El error lo tengo a la vista, tienes que moverte por el directorio hasta llegar al vbs, el mio comienza con C: porque lo tengo en la raíz, el tuyo lo tienes en el escritorio.

Muevete por la consola :xD

Saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: rconde79 en 2 Marzo 2011, 19:18 pm
Comprobado y funcionando!

Enhorabuena gankutsuo. Has hecho un programa magnífico. Esto me va a evitar muchos quebraderos de cabeza. Espero que se extienda por la red ya que es increíblemente útil, sobretodo para oficinas con proyectos en red con cientos de subcarpetas.

Muchas gracias amigo!


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 2 Marzo 2011, 19:18 pm
jaja!!! por fin llega el dia que me toca corregir un script del gran Nov...

XD que va, es broma, está bien, lo que pasa es que parece que no tienes cscript? estas bajo windows ahora? xD que version?

para corrar el vbscript, o le pinchas 2 veces click, o como dice Nov sería mediante "cscript.exe", esté debería estar en c:\windows\system32\cscript.exe"

Código:
@echo off
c:\windows\system32\cscript.exe elarchivobs.vbs

no entiendo mucho de vbs pero parece que el script solo se puede ejecutar como dijo nov, mediante el cscript... :S por algo lo habrá dicho, luego lo pruebo yo a ver que tal


Bien gracias, lo he ejecutado desde Win32 y ha funcionado, pero (aviso para nov) no ha detectado la prueba que tengo para probar mi script, la verdad no se si estoy haciendo algo mal, porque como les he dicho no soy muy de Win si no más bien de GNU/Linux así que les muestro una comparativa y me avisan si lo que hago está bien o mal:

(http://i52.tinypic.com/31435e8.jpg)

y el txt que obtengo del vbs sale vacio =s

Saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 2 Marzo 2011, 19:19 pm
Comprobado y funcionando!

Enhorabuena gankutsuo. Has hecho un programa magnífico. Esto me va a evitar muchos quebraderos de cabeza. Espero que se extienda por la red ya que es increíblemente útil, sobretodo para oficinas con proyectos en red con cientos de subcarpetas.

Muchas gracias amigo!

Genial me alegro que haya funcionado esta vez si de maravilla!


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: SuperDraco en 2 Marzo 2011, 19:29 pm
Pues ya tienes más suerte que yo, porque a mi no me sale NADA xD.

ni las rutas con los ¡OK! ni nada... ups, que el segundo es el tuyo xD vaya lio


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 2 Marzo 2011, 19:33 pm
Pues ya tienes más suerte que yo, porque a mi no me sale NADA xD.

ni las rutas con los ¡OK! ni nada...
eh? No te sale! El del lado izquierdo es el de Nov y el derecho es el mio.... pensé que el de Nov sacaba algo por pantalla, pero analizando el código veo que no lo hace y el proposito es pasar la salida al txt..... el problema es que el txt que genera esta vacio sin la ruta de prueba que he puesto para la comprobación, no se si es error mio o algo en el vbs!

Saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: SuperDraco en 2 Marzo 2011, 19:36 pm
prueba con 2 ">>" a ver.


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: SuperDraco en 2 Marzo 2011, 19:40 pm
1.vbs(2, 1) Error de Microsoft VBScript en tiempo de ejecución: El subíndice está fuera del intervalo

Que pasa aqui Nov? xD odio ese error ya me lo conozco... :-X


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: Novlucker en 3 Marzo 2011, 04:29 am
Pensé que el script era autoexplicativo, por eso no puse mucho, lo he probado en otra máquina y funciona :huh:
De hecho el script si imprime por pantalla, pero si le ponen que redireccione a un archivo con > es imposible no? :xD Miren mi primer ejemplo :P

pitoloko, tu problema es con el parametro que estas pasando al script, o bien no lo estas haciendo, o bien algo esta mal :-X

Peeero, de cualquier modo el problema es que en el script solo he puesto para verificar las carpetas, pero no los archivos :xD

Saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: SuperDraco en 3 Marzo 2011, 08:00 am
Nada, a mi no me funciona! y me aseguro de meterlo donde hay rutas de carpetas de mas de 256 caracteres, y pruebo el script sin parametros, sin pasarlo a un txt ni nada, se queda como "cargando" 3 segundos pero no sale nada...

Hace poco me bajé una actualización de seguridad de Windows, que es una nueva version del cscript y el wscript... solo puedo pensar que sea por eso :/ da igual.

saludos.


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: Novlucker en 3 Marzo 2011, 12:31 pm
Es que no me estas leyendo, dije que el script esta mal, solo informa de rutas de carpetas de más de 256 caracteres y no de archivos :xD , este si tiene que funcionar.

Código
  1. Set objfso = createobject("scripting.filesystemobject")
  2. Set IDir = objfso.getfolder(wscript.arguments(0))
  3. ListDirs(IDir)
  4.  
  5. Function ListDirs(IFol)
  6. if len(IFol.path)>256 then wscript.echo IFol.path
  7.  
  8. Set FilesIFol = IFol.files
  9.  
  10. For each FF in FilesIFol
  11. if len(FF.path)>256 then wscript.echo FF.path
  12. Next
  13.  
  14. Set SubsIFol = IFol.subfolders
  15.  
  16. On error resume next
  17. For each SF in SubsIFol
  18. ListDirs(SF)
  19. Next
  20. End Function

Saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: RyogiShiki en 3 Marzo 2011, 20:48 pm
Es que no me estas leyendo, dije que el script esta mal, solo informa de rutas de carpetas de más de 256 caracteres y no de archivos :xD , este si tiene que funcionar.

Código
  1. Set objfso = createobject("scripting.filesystemobject")
  2. Set IDir = objfso.getfolder(wscript.arguments(0))
  3. ListDirs(IDir)
  4.  
  5. Function ListDirs(IFol)
  6. if len(IFol.path)>256 then wscript.echo IFol.path
  7.  
  8. Set FilesIFol = IFol.files
  9.  
  10. For each FF in FilesIFol
  11. if len(FF.path)>256 then wscript.echo FF.path
  12. Next
  13.  
  14. Set SubsIFol = IFol.subfolders
  15.  
  16. On error resume next
  17. For each SF in SubsIFol
  18. ListDirs(SF)
  19. Next
  20. End Function

Saludos

Bien! jaja cierto, lo he probado y ha ido sin problemas

Saludos


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: Di_Marcus en 18 Diciembre 2011, 09:01 am
Dios mío un millón de gracias.

Unas pequeñas cuestiones:

1. Que programas me tengo que instalar en Windows para modificar el script.

2. Cómo paso lo que he modificado a un .exe

Os explico el porque de estas cuestiones. La aplicación es perfecta pero también me interesaria cambiar el valor "255" y ponerlo un poco más bajo, con la finalidad de saber que carpetas están a punto de sobrepasar el límite.

Muchisimas gracias


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: Randomize en 18 Diciembre 2011, 10:03 am
Ojo al revival de temas antiguos  :(


Título: Re: Solucionar y evitar el error de "Ruta demasiado larga" en Windows
Publicado por: the red en 24 Abril 2012, 18:10 pm
me funciono solo cambiandole el nombre al archivo por uno mas  corto gracias ..