Foros del Web » Programación para mayores de 30 ;) » Programación General »

renombrar archivos

Estas en el tema de renombrar archivos en el foro de Programación General en Foros del Web. hola. necesito renombrar archivos en una carpeta. por ejemplo tengo nombres de archivo hola1.txt, hola2.txt... asi hasta el 40. en otra carpeta tengo o mismo. ...
  #1 (permalink)  
Antiguo 05/04/2007, 13:24
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 6 meses
Puntos: 0
De acuerdo renombrar archivos

hola. necesito renombrar archivos en una carpeta. por ejemplo tengo nombres de archivo hola1.txt, hola2.txt... asi hasta el 40. en otra carpeta tengo o mismo. entonces enb esta segunda carpeta debo empezar a poner hola41.txt, hola42.txt... asi hasta 80. he leido algo que puede servirme:

system("dir "05042007 de 41 a 80"\*.xml /b >zz.csv");
open(Inic,"zz.csv");
@filas="";
i=0;
while(<Inic>)
{
rename(Inic,Inic+i);
}


esto es solo un comienzo.
ojala puedan darme una manito!
__________________
Dios es mas grande que tu problema :-)
  #2 (permalink)  
Antiguo 05/04/2007, 19:41
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: renombrar archivos

Eso se puede hacer en Perl en una sola línea, desde la misma línea de comandos:
Código:
perl -le 'opendir(DIR,".");while($f=readdir(DIR)){next unless ($x)=$f=~/hola(\d+)/;next if $x > 40; $x+=40;print $f;rename($f,"hola$x.txt")}'
Hay que hacer una comprobación de $x <=40 porque sino, al renombrar hola1.txt a hola41.txt lo volvería a leer en las siguientes vueltas, convirtiéndolo en hola81.txt (al menos eso hace en mi Linux).
  #3 (permalink)  
Antiguo 12/04/2007, 08:14
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 6 meses
Puntos: 0
De acuerdo Re: renombrar archivos

en windos deberia funcionar igual?
lo otro instale ActivePerl-5.8.8.817-MSWin32-x86-257965.exe en mi pc
y al poner C:perl se pega....
tonces en vista de esto modifique el script asi:

opendir(DIR,".");
while($f=readdir(DIR))
{next unless ($x)=$f=~/ERP_025_20070411_(\d+)/;next if $x <= 40; $x+=1;print $f;rename($f,"ERP_025_20070411_$x.txt")}

y bueno. no me funciona...
__________________
Dios es mas grande que tu problema :-)
  #4 (permalink)  
Antiguo 12/04/2007, 10:45
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Re: renombrar archivos

a mi si me funciona la función rename en windows...

Fijate bien que el nombre que le coloques sea válido...

Saludos
__________________
Esteban Quintana
  #5 (permalink)  
Antiguo 13/04/2007, 01:07
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: renombrar archivos

La diferencia entre Linux y Windows para ejecutar Perl una-línea es cambiar el sentido de las comillas.

' => "
" => '
  #6 (permalink)  
Antiguo 20/04/2007, 10:56
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 6 meses
Puntos: 0
De acuerdo Re: renombrar archivos

me resulto perfecto.!!
muy agradecido.
una duda que hace la linea
next unless ($x)=$f=~/ERP_025_20070322_(\d+)/;

Denuevo gracias.
__________________
Dios es mas grande que tu problema :-)
  #7 (permalink)  
Antiguo 20/04/2007, 12:10
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Re: renombrar archivos

Esa línea hace que el bucle valla a la siguiente línea al menos que la variable $f contenga la información ERP_025_20070322_(\d+)

y la últimos dígitos luego del _ se carga en la variable $x

Espero haber sido claro...

Saludos
__________________
Esteban Quintana
  #8 (permalink)  
Antiguo 16/05/2007, 15:10
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 6 meses
Puntos: 0
De acuerdo Re: renombrar archivos

me funciona super bien hasta que necesité cambiarle el nombre a 20 carpetas diferentes. y con 40 archivos cada uno. o sea renombrar archivos hasta el 800.
en la tercera carpeta desde el 81 al 120 se mareo el script. y de ahi en adelante. lo he revisado y no logro dar con el problema.
quisiera saber que tema de perl necesito leer para entender.
muchas gracias.
__________________
Dios es mas grande que tu problema :-)
  #9 (permalink)  
Antiguo 16/05/2007, 15:30
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: renombrar archivos

Una forma fácil de hacerlo sería metiendo los nombres de los archivos nada más empezar en un array. Y luego recorrer el array renombrando los ficheros.

En la anterior solución se va renombrando a la vez que se recorre el directorio, con lo que siempre existe el peligro de que el bucle se encuentre con los ficheros ya renombrados.
  #10 (permalink)  
Antiguo 16/05/2007, 15:42
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 6 meses
Puntos: 0
De acuerdo Re: renombrar archivos

[quote=
En la anterior solución se va renombrando a la vez que se recorre el directorio, con lo que siempre existe el peligro de que el bucle se encuentre con los ficheros ya renombrados.[/QUOTE]

para ejecutar cada vez el proceso. inserto el script en la carpeta y le modifico solo
next if $x <= 40;
$x+=40;

sabes. por que no me recomiendas algun manual. Fijate que esto lo hago por lo menos una vez a la semana y se torna muy tedioso.
Muchisimas gracias por responder.
Atte.
MG
__________________
Dios es mas grande que tu problema :-)
  #12 (permalink)  
Antiguo 16/05/2007, 20:17
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 6 meses
Puntos: 0
De acuerdo Re: renombrar archivos

mira. parece que estoy cerca de la solucion. pero no funciona el rename
Código:
@files = `dir c:\perl\p /b /on *.txt`;
$mm=10;
foreach $x (@files) {
   $nom=substr($x,0,length($x)-6);
   $ext='txt';
   rename("$x","$nom.$mm.$ext");
   print "$nom.$mm.$ext\n";
   $mm++;
  }
$val=<STDIN>;
Gracias por tu ayu da
__________________
Dios es mas grande que tu problema :-)
  #13 (permalink)  
Antiguo 18/05/2007, 03:17
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: renombrar archivos

Prueba a poner

rename(...) or die "ERROR: No pude renombrar: $!\n";

para ver si te da una pista de porqué no lo ha podido hacer.
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 21:06.