Foros del Web » Programando para Internet » ASP Clásico »

Renombrar todos los archivos de una carpeta

Estas en el tema de Renombrar todos los archivos de una carpeta en el foro de ASP Clásico en Foros del Web. Hola a todos: He buscado por Internet, en muchos sitios, y he leído las faqs y la biblioteca de funciones buscando la respuesta a esta ...
  #1 (permalink)  
Antiguo 20/09/2009, 09:48
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Renombrar todos los archivos de una carpeta

Hola a todos:

He buscado por Internet, en muchos sitios, y he leído las faqs y la biblioteca de funciones buscando la respuesta a esta cuestión, pero no he encontrado nada. Veo que en Internet hay muchos códigos que te ayudan a renombrar un archivo, tras subirlo al servidor, por ejemplo. Yo mismo ya he conseguido subir imágenes al servidor, y crear automáticamente una miniatura de las mismas, dándole otro nombre. Sin embargo, estos códigos sólo sirven para un único archivo cada vez.

Lo que necesito es un código que haga un bucle por todos los archivos que hay en una carpeta, y que renombre todos esos archivos. En este caso, el nombre sería igual que el original, pero con una especie de prefijo.

Es decir, que si en una carpeta tengo estos archivos...

001.jpg
002.jpg
003.jpg
...
etc.

... automáticamente mes los renombre a...

prefijo_001.jpg
prefijo_002.jpg
prefijo_003.jpg
...
etc.

Yo creo que no tiene que ser difícil, pero no sé hacerlo, ése es el problema. Si alguien me puede ayudar, gracias anticipadas. Por cierto, que además me gustaría saber si este mismo script se podría ejecutar incluyendo a todas las subcarpetas que hubiera en un mismo directorio. Es decir, que cambie todos los nombres de todos los archivos que hay en las subcarpetas que cuelgan de la carpeta indicada.

Muchas gracias y un saludo.
  #2 (permalink)  
Antiguo 21/09/2009, 08:25
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 21 años
Puntos: 4
Re: Renombrar todos los archivos de una carpeta

Puedes hacerlo mediante el filesystemobject. Aqui un ejemplo :

http://classicasp.aspfaq.com/files/d...temobject.html
  #3 (permalink)  
Antiguo 21/09/2009, 13:18
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

Sí, ese ejemplo ya lo había visto. El problema es que cambia el nombre de un único archivo. Y que le tienes que indicar el nombre anterior del archivo. Y yo lo que quiero es que automáticamente cambie los nombres de todos los archivos de la carpeta, sin tener que decirle yo cómo se llaman antes, ni tener que hacer nada. O sea, que si hay mil fotos en la carpeta, por ejemplo, las cambie todas automáticamente.

Supongo que sería como lo que comentas, pero con un bucle automático que lea los archivos uno a uno, y, por cada uno de ellos, modifique el nombre añadiendo un prefijo delante, que es lo que quiero.

Muchas gracias por tu ayuda.
  #4 (permalink)  
Antiguo 21/09/2009, 13:54
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Renombrar todos los archivos de una carpeta

Si lees en esa misma página hay más ejemplos del FSO que pudieran servirte, por ejemplo

Iterar un subdirectorio
Obtener el nombre y demás atributos de un archivo

que juntos con el ejemplo de orharo2003 ya te completan lo que necesitas.

Haz la prueba y si te marca error, aquí lo depuramos

Saludos
  #5 (permalink)  
Antiguo 22/09/2009, 03:51
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

Casi casi lo tengo... Pero me encuentro con un problema que no estoy siendo capaz de solucionar.

He logrado crear un listado de subcarpetas dentro de una ruta concreta, y un listado de archivos dentro de cada una de esas subcarpetas.

También he conseguido cambiar los nombres de esos archivos.

Sin embargo, me da problemas cuando cambia los nombres... El problema es que aplica el bucle más veces de las necesarias, o que por cada archivo que hay vuelve a renombrar todos los demás, incluso los que ya habían sido renombrados. No sé si me explico bien...

Os pongo un ejemplo:

Listado de carpetas y archivos antes de aplicar el script:

CARPETA: CARPETA01

1. archivo01.txt
2. archivo02.txt
3. archivo03.txt

TOTAL ARCHIVOS: 3

CARPETA: CARPETA02

1. archivo01.txt
2. archivo02.txt
3. archivo03.txt

TOTAL ARCHIVOS: 3

Resultado tras aplicar el script (perdón por el ladrillo...):

CARPETA: CARPETA01

1. nuevonombre_archivo01.txt
2. nuevonombre_archivo02.txt
3. nuevonombre_archivo03.txt
4. nuevonombre_nuevonombre_archivo01.txt
5. nuevonombre_nuevonombre_archivo02.txt
6. nuevonombre_nuevonombre_archivo03.txt
7. nuevonombre_nuevonombre_nuevonombre_archivo01.txt
8. nuevonombre_nuevonombre_nuevonombre_archivo02.txt
9. nuevonombre_nuevonombre_nuevonombre_archivo03.txt
10. nuevonombre_nuevonombre_nuevonombre_nuevonombre_ar chivo01.txt
11. nuevonombre_nuevonombre_nuevonombre_nuevonombre_ar chivo02.txt
12. nuevonombre_nuevonombre_nuevonombre_nuevonombre_ar chivo03.txt
13. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_archivo01.txt
14. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_archivo02.txt
15. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_archivo03.txt
16. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_archivo01.txt
17. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_archivo02.txt
18. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_archivo03.txt
19. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_archivo01.txt
20. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_archivo02.txt
21. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_archivo03.txt
22. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_arch ivo01.txt
23. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_arch ivo02.txt
24. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_arch ivo03.txt
25. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_archivo01.txt
26. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_archivo02.txt
27. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_archivo03.txt
28. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_archivo01.txt
29. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_archivo02.txt
30. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_archivo03.txt
31. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_archivo01.txt
32. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_archivo02.txt
33. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_archivo03.txt
34. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_archiv o01.txt
35. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_archiv o02.txt
36. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_archiv o03.txt
37. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_nuevon ombre_archivo01.txt
38. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_nuevon ombre_archivo02.txt
39. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_nuevon ombre_archivo03.txt

TOTAL ARCHIVOS: 39

(continúo en el siguiente mensaje, que aquí ya no me deja escribir más caracteres...)
  #6 (permalink)  
Antiguo 22/09/2009, 03:51
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

CARPETA: CARPETA02

1. nuevonombre_archivo01.txt
2. nuevonombre_archivo02.txt
3. nuevonombre_archivo03.txt
4. nuevonombre_nuevonombre_archivo01.txt
5. nuevonombre_nuevonombre_archivo02.txt
6. nuevonombre_nuevonombre_archivo03.txt
7. nuevonombre_nuevonombre_nuevonombre_archivo01.txt
8. nuevonombre_nuevonombre_nuevonombre_archivo02.txt
9. nuevonombre_nuevonombre_nuevonombre_archivo03.txt
10. nuevonombre_nuevonombre_nuevonombre_nuevonombre_ar chivo01.txt
11. nuevonombre_nuevonombre_nuevonombre_nuevonombre_ar chivo02.txt
12. nuevonombre_nuevonombre_nuevonombre_nuevonombre_ar chivo03.txt
13. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_archivo01.txt
14. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_archivo02.txt
15. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_archivo03.txt
16. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_archivo01.txt
17. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_archivo02.txt
18. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_archivo03.txt
19. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_archivo01.txt
20. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_archivo02.txt
21. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_archivo03.txt
22. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_arch ivo01.txt
23. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_arch ivo02.txt
24. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_arch ivo03.txt
25. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_archivo01.txt
26. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_archivo02.txt
27. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_archivo03.txt
28. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_archivo01.txt
29. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_archivo02.txt
30. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_archivo03.txt
31. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_archivo01.txt
32. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_archivo02.txt
33. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_archivo03.txt
34. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_archiv o01.txt
35. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_archiv o02.txt
36. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_archiv o03.txt
37. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_nuevon ombre_archivo01.txt
38. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_nuevon ombre_archivo02.txt
39. nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_nuevon ombre_archivo03.txt

TOTAL ARCHIVOS: 39

¡OJO! No es que me queden un total de 39 archivos, sólo que me los lista una y otra vez los mismos. Lo que hace es listarlos, cambiar el nombre, volver a listarlos, volver a cambiar de nombre... Y así durante 13 vueltas (39/3).

Así que, al final, me quedo con tres archivos en cada carpeta, pero los nombres son:

nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_nuevon ombre_archivo01.txt
nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_nuevon ombre_archivo02.txt
nuevonombre_nuevonombre_nuevonombre_nuevonombre_nu evonombre_nuevonombre_nuevonombre_nuevonombre_nuev onombre_nuevonombre_nuevonombre_nuevonombre_nuevon ombre_archivo03.txt

O sea, que me modifica su nombre una y otra vez, hasta añadir 13 veces el prefijo 'nuevonombre_' a cada archivo.

¿Por qué 13 veces? ¿Y cómo puedo hacer para que sólo les cambie de nombre una vez y ya está? Yo creo que la solución tiene que ser facil y sencilla, pero no la encuentro. Tampoco es que sea muy bueno programando bucles, todo sea dicho de paso...

Os pongo el script con todo lo que he conseguido hasta el momento.

<%

ruta = server.mappath("/pruebas")

Response.Write("<h1>RUTA: " & ruta & "</h1>")

Set fso = CreateObject("Scripting.FileSystemObject")
Set carpeta = fso.GetFolder(ruta)

For each subcarpeta in carpeta.subFolders
Response.Write("<h1>CARPETA: " & subcarpeta.Name & "</h1>")

xnumero = 1

For Each archivo in subcarpeta.files

archivo.name = "nuevonombre_" & archivo.Name

Response.Write xnumero & ". " & archivo.Name & "<br>"

xnumero = xnumero +1

Next

Response.Write "<br><b>TOTAL ARCHIVOS: " & xnumero -1 & "</b>"

next
set carpeta = nothing
set fso = nothing

%>

Muchas gracias de nuevo y un saludo.
  #7 (permalink)  
Antiguo 22/09/2009, 05:08
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 3 meses
Puntos: 126
Respuesta: Renombrar todos los archivos de una carpeta

Hola

Como no veía ningún motivo por el que ocurriera el problema que indicas, lo ha verificado. El hecho es que no se produce ese problema. Te muestro el resultado que se imprime

Cita:
CARPETA: subcarpeta
1. nuevonombre_3.gif
2. nuevonombre_3_half.gif
3. nuevonombre_4.gif
4. nuevonombre_4_half.gif
5. nuevonombre_5.gif
TOTAL ARCHIVOS: 5

CARPETA: subcarpeta2
1. nuevonombre_3.gif
2. nuevonombre_3_half.gif
3. nuevonombre_4.gif
4. nuevonombre_4_half.gif
5. nuevonombre_5.gif
TOTAL ARCHIVOS: 5
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #8 (permalink)  
Antiguo 22/09/2009, 05:21
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

¿No te da ningún problema? Qué raro, pues... A mí sí, una y otra vez. Siempre me hace lo mismo: me hace un bucle super largo (13 veces... ¿por qué 13 y no 12 o 14, por ejemplo?) y los archivos los renombra una y otra vez.

¿A tí sólo te los ha renombrado una vez? ¿Y sólo te los imprime una vez?

A mí me los imprime una vez, con el nombre original, los renombra, los vuelve a imprimir en el listado, los vuelve a renombrar, los vuelve a listar... Al final tengo un listado enorme, que tampoco es el correcto, pues no hay tantos archivos en la carpeta, y encima me los ha renombrado una y otra vez.

Creo que la solución sería primero renombrarlos, una única vez, y luego listarlos definitivamente. Pero el renombrarlos, repito, lo hace una y otra vez, no sé por qué.

Creo que este script puede ser muy útil, pues te permite renombrar todas las fotos de una carpeta de una manera rápida, por ejemplo. Es decir, que si tienes una galería de fotos, puedes cambiar todos los nombres de golpe, sin apenas esfuerzo, y sin tener que usar acciones de Photoshop. Para los que trabajamos con bases de datos de imágenes algo así nos puede resultar muy muy útil para ordenarlas y organizarlas.

A ver si algún otro lo prueba y dice si le funciona bien, como a Adler, o mal, como a mí.

Un saludo y gracias.
  #9 (permalink)  
Antiguo 22/09/2009, 05:52
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 3 meses
Puntos: 126
Respuesta: Renombrar todos los archivos de una carpeta

Hola

¿El código que muestras es todo el que hay en ese documento? Lo pregunto por que la única manera que se me ocurre que pueda ocurrir ese problema, es que la página se recargue una y otra vez

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #10 (permalink)  
Antiguo 22/09/2009, 13:27
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

El código del documento es el que aquí he puesto, no hay nada más, salvo los html, head, body, y algún que otro div, pero nada más.

Acabo de probar, y me sigue funcionando igual: 13 bucles.
  #11 (permalink)  
Antiguo 22/09/2009, 14:15
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Renombrar todos los archivos de una carpeta

La verdad es que yo cuando algo muy simple no me sale después de varios intentos, lo borro y lo vuelvo a hacer.

En tu caso, yo no leí tu código para no tratar de arreglarlo, y es que a veces eso puede tomar más tiempo que hacerlo de nuevo. Aquí tienes lo que ocupas según tu primer mensaje:

Código ASP:
Ver original
  1. <&#37;
  2. Set fso = Server.CreateObject("Scripting.FileSystemObject")
  3. Set folder = fso.GetFolder(Server.MapPath("/Sitios/MisPruebas/Rename/"))
  4. Set files = folder.Files '
  5.  
  6. Response.write ("ANTES<br>")
  7. For Each file in files
  8.     Response.write (file.Name & ", size=" & file.size\1024 & "<br>")
  9. Next
  10.  
  11. For Each file in files
  12.     fso.MoveFile Server.MapPath("/Sitios/MisPruebas/Rename/") & "\" & file.Name, Server.MapPath("/Sitios/MisPruebas/Rename/") & "\NewName_" & file.Name
  13. Next
  14.  
  15. Response.write ("DESPUES<br>")
  16. For Each file in files
  17.     Response.write (file.Name & ", size=" & file.size\1024 & "<br>")
  18. Next
  19.  
  20. Set files = nothing
  21. Set folder = nothing
  22. Set fso = nothing
  23. %>


Saludos
  #12 (permalink)  
Antiguo 23/09/2009, 00:13
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

Myakire, en primer lugar gracias por tu tiempo y por tu código. Faltaría lo de las subcarpetas, pero, cuando funcione bien, lo completo yo mismo y lo pongo aquí.

Y digo "cuando funcione bien" porque se me sigue reproduciendo el mismo error: el bucle se repite varias veces renombrando los archivos ya renombrados.

Eso sí, he hecho alguna prueba, y voy descubriendo de qué se puede tratar:

- Si el nuevo nombre de archivo tiene el prefijo "nuevonombre_" el bucle se repite 13 veces.

- Si el nuevo nombre tiene el prefijo "NewName_", que es el que tú has usado, el bucle se repite 3 veces.

- Si el prefijo es "New_", se repite 2 veces.

- Y si el prefijo es sólo "N_", se ejecuta una única vez.

Siempre con la misma ruta y el mismo número de archivos, ya que utilizo todo el rato los mismos con los mismos nombres, para ver en qué cambian cada vez.

He hecho pruebas con otros prefijos, y el bucle se repite más o menos veces dependiendo del número de caracteres que tienen esos prefijos.

¿Hay alguna lógica en todo esto? ¿A tí, Myakire, también te funciona correctamente?
  #13 (permalink)  
Antiguo 23/09/2009, 06:55
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Renombrar todos los archivos de una carpeta

mmmmm, no incluí subcarpetas por que me referí a tu primer post

Cita:
Lo que necesito es un código que haga un bucle por todos los archivos que hay en una carpeta, y que renombre todos esos archivos. En este caso, el nombre sería igual que el original, pero con una especie de prefijo.
Pero es cosa de agregarle una lectura recursiva, al rato si no lo haz sacado te pongo el código, ahora, ¿el que estas probando y que no funciona es el código que yo te puse o ya le metiste mano?
  #14 (permalink)  
Antiguo 23/09/2009, 08:08
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Renombrar todos los archivos de una carpeta

Bueno, tuve un tiempecito libre y ahí esta el código, ¿qué pero le pones a este?

Código ASP:
Ver original
  1. <html>
  2. <body>
  3. <table border="1">
  4. <%
  5. vPath = Server.MapPath("/Sitios/MisPruebas/Rename/")
  6. Set fso = Server.CreateObject("Scripting.FileSystemObject")
  7. Set folder = fso.GetFolder(vPath)
  8. For Each Subfolder in folder.Subfolders
  9. %> <tr><td colspan="2"><%=Subfolder%><%
  10.    ContenidoDelFolder Subfolder
  11. Next
  12. %>
  13. </body>
  14. </html>
  15. <%
  16. Sub ContenidoDelFolder(Subfolder)
  17.  vPathTmp = Subfolder & "\"
  18.  For Each file in Subfolder.Files
  19. %> <tr><td>&nbsp;<td><%=file.Name%><%
  20.      fso.MoveFile vPathTmp & file.Name, vPathTmp & "nuevoNombre_" & file.Name
  21.  Next
  22. End Sub
  23. %>
  #15 (permalink)  
Antiguo 25/09/2009, 20:23
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

Hola de nuevo. Estos dos últimos días he estado muy ocupado y no he podido probar tu código, pero ahora lo acabo de hacer, y... Bueno, por partes:

En primer lugar, no pongo ningún 'pero' a tu código... Ni mucho menos, estoy totalmente agradecido por haberte esforzado por mí. Quizás en mi primer mensaje no me expresé bien, y olvidé decir que el código que buscaba incluía el listar los contenidos de la subcarpetas existentes en un directorio. Luego me he aclarado mejor, pero no en el primer mensaje, siento no haberlo explicado bien.

Lo de listar subcarpetas creo que ya lo sé hacer yo, el problema viene al modificar los nombres de los archivos. No sé por qué, pero siguen saliendo los nombres mal.

He probado tu nuevo código, y me vuelve a repetir 13 veces el bucle. No sé qué puede pasar, no sé si vosotros habéis probado el código o no, pero mi resultado final es el de los mismos archivos junto al prefijo que le hemos asignado, pero repetido 13 veces. No entiendo por qué lo hace así. He probado con todos los códigos que hemos ido sugeriendo, y siempre me hace lo mismo.

¿Alguien más ha probado con estos códigos? ¿Y a alguien le funciona bien todo esto? ¿Por qué yo no lo entiendo, la verdad.

Saludos y gracias una vez más.
  #16 (permalink)  
Antiguo 26/09/2009, 19:56
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Renombrar todos los archivos de una carpeta

Es claro que cada código que uno normalmente coloca a menos que se exprese lo contrario es por que uno lo ha probado, y este funciona perfecto con una carpeta con N subcarpetas, renombra todos y cada uno de los archivos de dichas subcarpetas con el prefijo establecido.

¿Podrías colocar el último código que haz probado y la estructura exacta de tus directorios y contenido (incluyendo cómo lo llamas), please?
  #17 (permalink)  
Antiguo 02/10/2009, 13:57
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

Hola, Myakire:

Nuevamente, perdón por el retraso. Tengo un familiar enfermo y estos días intento seguir con el trabajo pero la cabeza no siempre está presente donde tiene que estar. Así que me ha costado toda la semana volverme a poner con esto.

Yo no digo que tu código no esté probado... Por supuesto que lo estará, y que te funciona. Lo que no sé es por qué ------ no me funciona a mí...

Además, tengo un par de trabajos urgente para acabar, y en ambos tengo que renombrar miles de archivos que están en varias decenas de carpetas, y este código me soluciona la vida. Así que muchas gracias por ofrecérmelo. Ahora sólo necesito que me funcione a mí también, y me habré quitado un gran peso de encima...

He probado a cambiarlo de sitio, cambiar carpetas, ficheros... He probado de todo, y me sigue sin funcionar. La mitad de las veces me dice que permiso denegado. La otra mitad que no encuentra la ruta. Y, las veces que funciona, me hace el bucle que ya he mencionado otras veces.

Lo peor es la frustración y desesperación que esto te genera... He estado varias veces a punto de pegar un puñetazo a la pantalla... grrrr...

Creo que voy a desconectar un poco, y quizás luego vuelva a probar empezando de cero, a ver qué tal. Si fuera otro código pasaría de él, haría otra cosa, y punto. Pero a éste lo necesito...

Gracias de nuevo. Por el código y por dejarme descargar la rabia acumulada, ja, ja...
  #18 (permalink)  
Antiguo 02/10/2009, 14:32
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 3 meses
Puntos: 126
Respuesta: Renombrar todos los archivos de una carpeta

Hola

¿Por que no intentas empezar de cero?. Me explico; crea una carpeta en ella introduces un par de archivos y usando este código que te dio Myakire, a ver que ocurre

Nota: La carpeta con los archivos y el archivo.asp han de estar en el mismo nivel

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #19 (permalink)  
Antiguo 02/10/2009, 18:28
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

Acabo de probar como dices, Adler, empezando de cero. He creado un nuevo archivo asp, he creado una ruta nueva en el root, e incluso le he puesto los mismos nombres que vienen en el script ("/Sitios/MisPruebas/Rename/"). He comprobado que la carpeta y los archivos estén en el mismo nivel... e incluso en varios niveles distintos, por probar que no quede. Y con este código siempre me devuelve el siguiente error:

Error de Microsoft VBScript en tiempo de ejecución (0x800A0046)
Permiso denegado
/sitios/Sitios/MisPruebas/Rename/prueba.asp, línea 20

Y he establecido permisos de lectura, escritura y ejecución de scripts... De hecho, consigo siempre localizar la ruta correcta, efectuar listado de carpetas, etc, pero la línea 20 siempre da fallo, la que corresponde a fso.MoveFile.

No entiendo, la verdad.

Con mi código sí que consigo que funcione, que no me de errores de permisos, pero me crea más de un bucle, no sé por qué.

Pongo el código que uso, para que lo veáis... y que lo aproveche el que pueda:

<%

ruta = server.mappath("/intranet/pruebas")

Response.Write("<h1>RUTA: " & ruta & "</h1>")

Set fso = CreateObject("Scripting.FileSystemObject")
Set carpeta = fso.GetFolder(ruta)
for each subcarpeta in carpeta.subFolders
Response.Write("<h1>CARPETA: " & subcarpeta.Name & "</h1>")

%>

<%

xnumero = 1

For Each archivo in subcarpeta.files

archivo.name = "nuevonombre_" & archivo.Name

Response.Write xnumero & ". " & archivo.Name & "<br>"

xnumero = xnumero +1

Next

Response.Write "<br><b>TOTAL ARCHIVOS: " & xnumero -1 & "</b>"

%>

<%

next
set carpeta = nothing
set fso = nothing

%>

Saludos y gracias una vez más.
  #20 (permalink)  
Antiguo 02/10/2009, 23:04
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Renombrar todos los archivos de una carpeta

Cita:
Y he establecido permisos de lectura, escritura y ejecución de scripts
nop

Debes darle permiso de escritura (prueba con control total de una vez) al usuario IUSR_NombreDeTuServidor y de una vez al usuario IWAM_NombreDeTuServidor. Como acabas de crear una ruta nueva no tienen acceso estos usuarios a dicho path.

Con eso te funcionará

Saludos
  #21 (permalink)  
Antiguo 03/10/2009, 05:29
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

He intentado hacer algo de lo que dices, pero no sé muy bien a qué te refieres. Yo trabajo en local con el IIS, y nunca tengo que configurar usuarios, y todos los códigos me funcionan sin problemas. Aunque cree nuevas rutas, nuevas páginas, casi nunca tengo que configurar nada, sólo dar permisos de lectura, escritura, y ejecución de scripts. Y he intentado hacer lo que dices, pero no sé cómo ni dónde hacerlo, la verdad.

No os molestéis más, yo ya me he rendido... Es una pena, pero hay que aceptar el fracaso de vez en cuando también.

Un saludo y muchas gracias por todo.
  #22 (permalink)  
Antiguo 03/10/2009, 06:35
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 3 meses
Puntos: 126
Respuesta: Renombrar todos los archivos de una carpeta

Hola

Bueno es una pena que te hayas dado por vencido. No se volverás para leer este post pero por si vuelve, esta estructura es un error

Cita:
Server.MapPath("/Sitios/MisPruebas/Rename/")
/sitios/Sitios/MisPruebas/Rename/prueba.asp
Prueba con esta otra

Cita:
Server.MapPath("./MisPruebas/Rename")
/sitios/prueba.asp
Ahora la estructura de tu directorio sería así

Cita:
+ sitios (prueba.asp)
++ MisPruebas (carpeta contenedora de subcarpetas)
+++ Rename (subcarpeta con los archivos)
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #23 (permalink)  
Antiguo 03/10/2009, 07:33
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

Tampoco me he dado por vencido del todo... Llevo un par de horas intentándolo aún... Si hoy no lo consigo sí que me voy a dar por vencido del todo, porque no puedo perder más tiempo con esto. Pero de momento voy a gastar los últimos cartuchos disponibles...

Gracias por volver a escribir. He probado lo que dices, y no me funciona. Y alguna otra variante, por si acaso, y tampoco. Si pongo la ruta mal, no la encuentra. Es lógico. Pero si pongo la ruta bien, me dice 'Permiso denegado'.

Ahora me he olvidado un poco de ese código, y sigo con el mío. No entiendo por qué me hace ese bucle. Y quiero saberlo.

He conseguido que me liste todas las carpetas de un directorio, y todos los archivos de esas subcarpetas. Eso es lo que quería, así que, desde ese punto, estoy muy contento. Es un código útil que puede tener muchas aplicaciones.

El problema es que me está renombrando un par de veces cada archivo. Es como si lo abriera, lo renombrara, se lo volviera a encontrar, lo volviera a renombrar, y ya pasara entonces al siguiente.

Muy raro.

Voy a hacer unas últimas pruebas y vuelvo.

Gracias.
  #24 (permalink)  
Antiguo 03/10/2009, 08:19
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

Bueno, finalmente os comento lo que ha pasado, y hasta qué punto he llegado:

Mi código funciona... a medias. He metido todas las carpetas (143) y fotos que había en ellas (2888) para renombrar en la ruta que había preparado para el script, y lo he puesto en marcha... El resultado:

En 22 de las carpetas se producen fallos a la hora de renombrar. El resto funcionan bien.

¿Cuáles son esos fallos? Bueno, pues que si el prefijo que tenía que escribirse delante de cada nombre de archivo era "mini_", en muchos de esos archivos se ha escrito dos veces, o sea, "mini_mini_".

¿Por qué en unos sí y en otros no? El por qué no lo sé aún, pero os pongo algunos ejemplos para que veáis los archivos que se han renombrado mal:

1.jpg --> mini_1.jpg --> BIEN
2.jpg --> mini_2.jpg --> BIEN
3.jpg --> mini_3.jpg --> BIEN
...
Etc. Con números funciona perfectamente, con cualquier número que no sea muy grande)

autobus01.jpg --> mini_mini_autobus01.jpg --> MAL

alevinmasculino.jpg --> mini_alevinmasculino.jpg --> BIEN
alevinf.jpg --> mini_mini_alevinf.jpg --> MAL

Curioso, ¿no? Con textos se renombra bien si son textos largos, pero si son textos cortos se renombra dos veces.

tiro.jpg --> mini_mini_mini_tiro.jpg --> MAL

¡Tres veces se renombra! He comprobado que si el nombre del archivo tiene cuatro letras, renombra tres veces. De cinco a nueve letras, dos veces. A partir de diez letras, lo hace bien.

200805252575064_640.jpg --> mini_mini_200805252575064_640.jpg --> MAL

Como decía antes, si el número es excesivamente grande, funciona mal.

No se generan más archivos, como parecía al principio, sólo que a algunos de ellos los renombra más de una vez, según su nombre previo.

Y eso es todo. No hay quien lo entienda. Yo os pongo el código utilizado, por si a alguien le sirve.

A mí me vale de momento así... Se que no es perfecto ni mucho menos (¡ojalá lo fuera!), pero me ha permitido renombrar miles de archivos en un momento. Es más, ahora tengo que aplicarlo a un par de proyectos más, y con lo que se creo que me va a servir. Me ha ahorrado mucho trabajo... Aunque también es cierto que he perdido muchísimo tiempo intentando hacerlo funcionar. Pero así he aprendido nuevas cosas.

Y todo esto es divertido, ¿no? Es un reto, como un puzzle o enigma, que te va consumiendo y desesperando por momentos, pero que te tiene enganchado hasta que al final consigues hallar la solución.

Si a alguien se le ocurre por qué el código se comporta así, se admiten ideas. Si no, no os preocupéis, yo ya me conformo con lo que tengo.

Y, nuevamente, muchísimas gracias por vuestra paciencia, en especial a Adler y Myakire. Espero que todo este trabajo le pueda servir a alguien.

Saludos.



<%

Server.ScriptTimeout=1200

ruta = server.mappath("/pruebas")

Response.Write("<h1>RUTA: " & ruta & "</h1>")

Set fso = CreateObject("Scripting.FileSystemObject")
Set carpeta = fso.GetFolder(ruta)
For Each subcarpeta in carpeta.subFolders
Response.Write("<h1>CARPETA: " & subcarpeta.Name & "</h1>")

xnumero = 1

For Each archivo in subcarpeta.Files

Response.Write ("<div style='border: 1px solid silver; padding: 10px; margin: 5px;'>")

Response.Write subcarpeta.Name & ("/") & archivo.Name & (" --> ")
archivo.Name = "mini_" & archivo.Name
Response.Write subcarpeta.Name & ("/") & ("<b>") & archivo.Name & ("</b>")

Response.Write ("</div>")

xnumero = xnumero +1

Next

Response.Write "<br><b>TOTAL ARCHIVOS: " & xnumero -1 & "</b>"

Next

Set carpeta = nothing
Set fso = nothing

%>
  #25 (permalink)  
Antiguo 03/10/2009, 09:28
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Renombrar todos los archivos de una carpeta

Solo para no dejarte con las dudas de como dar permisos:

Seleccionas la carpeta sobre las que se va a trabajar, usando la ruta con problemas sería "Rename", botón derecho y ...:

1) seleccionas "Compartir y Seguridad"
2) seleccionas la pestaña "seguridad"
3) Buscas en la lista que ves en el recuadro al usuario IUSR_Nombredetucomputadora, debe de tener una descripción como "Cuenta invitado para Internet (Computadora/IUSR_COMPUTADORA) en caso, claro de que tu máquina se llame "COMPUTADORA"
4) Si sí existen los usuarios IUSR e IWAM, los seleccionas y marcas en los checkbox de abajo la opción "Control total", presionas "Aplicar", luego "Aceptar" y listo
5) Si no existen presionas el botón "Agregar"
6) En el recuadro que se te abre, presionas "Avanzadas" y luego "Buscar ahora", buscas a estos usuarios, los seleccionas y presionas "Aceptar", te regresas al paso 4 y listo


Saludos

PD. El manejo de estos usuarios es algo básico para un programador ASP, te sirva o no para este problema, esto es algo que DEBES saber. Algún día vas a generar PFD's, usar Crystal reports o hacer uploads de archivos y sin darles permisos como te menciono a estos usuarios, no vas a poder.
  #26 (permalink)  
Antiguo 06/10/2009, 01:47
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

Muchas gracias, Myakire. Yo intentaba establecer los permisos desde el administrador del PC, donde creas servidores virtuales, no desde las propiedades de la carpeta. Probaré lo que me dices, a ver si así me funciona tu script, que también puede ser que ahora que ya no lo necesito me funcione, je, je... Típica ley de Murphy. De todos modos, aunque no lo necesite ahora mismo ya, porque me las arreglé con la solución provisional que comenté, creo que es un código muy útil que conviene tener bien acabado para el futuro.

Yo trabajo mucho con ASP, y todas mis webs dinámicas las hago con este lenguaje. Voy aprendiendo sobre la marcha, conforme me van surgiendo las necesidades. Supongo que la mayoría de vosotros habréis seguido semejante método de aprendizaje. Y el manejo de usuarios en local todavía no lo había necesitado tocar, ya que todas mis aplicaciones son para Internet, y allí no tenía problemas. Upload de archivos hago continuamente (antes con un script que saqué de aquí, ahora con el componente aspupload), y no tengo problemas.

Un saludo y gracias por toda la ayuda prestada en este tema.
  #27 (permalink)  
Antiguo 06/10/2009, 07:06
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Renombrar todos los archivos de una carpeta

Pues alguien te debió haber configurado ese usuario, creo recordar que el componente aspupload es un instalador, en una de esas él lo hizo, pero de que dicho usuario debe tener permisos de escritura para grabar los archivos que se suben (si tienes acceso anónimo, claro), debe de tenerlo.

aquí instrucciones con imágenes
  #28 (permalink)  
Antiguo 07/10/2009, 13:03
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 19 años
Puntos: 0
Respuesta: Renombrar todos los archivos de una carpeta

Tienes razón, Myakire, no me he explicado bien: el componente aspupload lo uso ya instalado en el servidor, en los alojamientos que tengo contratados; trabajando en local nunca me había funcionado, aunque tampoco había probado demasiado... supongo que no funcionaba por lo que tú comentas. Eso sí, en Internet sin problemas, así que las webs las cuelgo y me funcionan bien.

Gracias por el nuevo enlace. Se que no puedo ofrecerte nada dados mis escasos conocimientos, pero si quieres algún código de los que me voy preparando, no tienes más que pedírmelo, por supuesto.

Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:16.