Renombrar un archivo con la fecha del día

Subira -  
oopapf Mensajes publicados 2 Estado Miembro -
```html

Me gustaría hacer una copia de un archivo en Windows, renombrándolo y agregándole la fecha del día en este formato:

  • Archivo original: toto.txt
  • Archivo de destino: toto_AAAAMMJJ.txt

¿Cómo puedo hacerlo mediante un procedimiento que pueda automatizar?

```

25 respuestas

  • 1
  • 2
  1. Stowabi
     
    Bueno, sé que estoy respondiendo a un viejo post, pero aquí hay una solución muy simple:

    Crear un archivo por lotes:
     set mydate=%date:~6,4%%date:~3,2%%date:~0,2% move toto.txt toto-%mydate%.txt 

    Coloca el archivo por lotes en la carpeta del archivo a renombrar
    11
    1. adslogique
       
      también se puede añadir %time:~0,2% para tener la hora en el nombre del archivo.

      un buen viejo script msdos simple, efectivo y muy práctico...
      ¡gracias Stowabi!
      0
    2. dug > adslogique
       
      ¡gracias chicos!
      ¡es lo que estaba buscando al final de este post, pasando de dbase a awk :)
      simple, limpio y preciso :)
      0
    3. Max
       
      ¡Muchas gracias, muy buen post!
      Sin embargo, hay que tener cuidado con los parámetros lingüísticos del puesto, el formato de la fecha puede variar...
      0
    4. hillbilly > adslogique
       
      Hola,
      En la publicación donde respondes sobre cómo renombrar un archivo añadiendo la fecha, ¿tendrías el argumento para añadir los minutos?

      Gracias.
      0
    5. Skaper
       
      ¡Funciona de maravilla!
      ¡Muchas gracias!
      0
  2. patrice
     
    No sé si mi contribución puede aportar algo, pero como ni siquiera sé escribir un pequeño programa, utilizo un freeware (bajo Win98) que se llama "the rename", extremadamente potente, que puede modificar la extensión o el nombre de todos los archivos de un directorio: se puede elegir la fecha, la hora, el contador incremental, añadir o renombrar texto, invertir mayúsculas y minúsculas, extraer nombres de archivos MP3 (creo haber entendido), eliminar espacios, etc., renombrar a archivos cortos; también habría posibilidad de modificar y añadir sus propios códigos.
    Aquí hay un ejemplo tomado de la ayuda:
    Situación: quieres renombrar una serie de archivos gráficos como

    affiche98.JPG
    back.jpg
    bakgrunn.jpg
    bunch1.jpg
    ours.jpg
    SAUT.jpg
    topbkg.jpg

    a una serie de nombres como img00001.jpg, img00002.jpg, img00003.jpg. También quieres que la extensión esté en minúsculas.

    Elige Modificar Prefijo en el marco de Prefijo, haz clic en la pestaña Agregar un contador, deja el valor inicial y el paso en sus valores originales y modifica los dígitos a 5. Luego, haz clic en la pestaña Texto y elige Reemplazar con texto y escribe img. En el marco de Extensión, desplázate a Minúsculas. Selecciona los archivos y haz clic en Iniciar. ¡Eso es todo!

    Por eso hice este programa, para crear este tipo de nombres de archivos.

    Parece complicado pero es muy simple de usar. El autor es Hervé Thouzard, pero su sitio se ha mudado. Merece ser conocido, además es gratuito y distribuible; creo que lo recuperé en Freelog, ¿quizás?

    Patrice
    2
  3. saad
     
    Hola a todos,
    Es cierto, ¿por qué no usar un pequeño programa que haga eso? Yo tengo uno, solo que para renombrar, solo acepta 8 caracteres,
    Avísenme si lo quieren,

    Saludos y @+
    1
  4. ipl Mensajes publicados 5738 Estado Colaborador de seguridad 585
     
    Buenas tardes Subira, buenas tardes a todos,

    Se puede hacer con un archivo .bat si introduces la fecha como parámetro.

    Algo así (archivo Sauve.bat):
    @echo off
    rem Sauve.bat AAAAMMJJ para guardar los archivos
    if %1.==. goto mess
    for %%V in (C:\dossier\*.*) do copy C:\dossier\%%v *_%1.*
    goto fin
    :mess
    echo es necesario introducir la fecha AAAAMMJJ
    :fin

    donde %1 es el parámetro que utilizas para lanzar el .bat:
    Sauve 20021118

    @12C4
    Ipl
    0
  5. subira
     
    Gracias ipl, tengo una buena pista, ¿no tendrías un truco para recuperar la fecha del día como parámetro en el procedimiento???
    tal vez anticipadamente hacer un estilo echo date > date.txt

    Y luego en el archivo .bat hacer:
    sauve date.txt (o sauve es el archivo .bat)

    ¡Si no, probaré!!!

    Gracias de nuevo
    0
  6. ipl Mensajes publicados 5738 Estado Colaborador de seguridad 585
     
    Rebuenas noches Subira,

    No, no veo ningún truco en DOS o en Windows porque el comando Fecha muestra "La fecha actual es Lun 18/11/2002, pero podría haber un pequeño programa capaz de mostrar solo la fecha (sin / que es un carácter prohibido en el nombre del archivo)... en tiempos antiguos, tenía un programa basic que hacía eso (por supuesto, se puede hacer en muchos otros lenguajes... cualquier programador sabe hacerlo... de hecho, fue el tema de una conversación hace aproximadamente 2 semanas en CCM)

    Si obtuvieras un programa así -llámalo date.com- (un programa que mostraría la fecha de hoy en el formato AAAAMMJJ):
    Fecha|Guardar
    ¡haría el trabajo!

    - no creo que haya una variable de entorno que nos dé la fecha en este formato
    - también podríamos arreglárnoslas con un programa capaz de escribir el resultado en un archivo.
    - no creo que haya problema con la longitud del nombre (superior a 8) si el trabajo se hace en una ventana de DOS, es decir, en DOS bajo Windows.

    @12C4
    Ipl
    0
  7. SUBIRA
     
    Hola a todos

    Gracias por sus respuestas esclarecedoras.

    Estoy interesado en el pequeño programa que hace eso, ¡aunque solo tenga 8 caracteres!

    JMS
    0
    1. saadmohamed Mensajes publicados 7 Estado Miembro
       
      Hola,
      El programa lo tengo, lo escribí en Fox, pesa 9704 bytes, sin embargo, necesita un runtime un poco más voluminoso de 2 MB, no sé a dónde enviarles estos dos módulos,

      saludos desde Casablanca soleada, @+
      0
  8. ofournier.cbd Mensajes publicados 5862 Fecha de registro   Estado Miembro Última intervención   84
     
    Hola,

    un tema similar se ha tratado en PROGRAMACIÓN:
    http://www.commentcamarche.org/forum/affich-171991?full

    Otro post también hablaba de un pequeño exe o com que daba la fecha del día en DOS, pero no consigo encontrarlo...

    Olivier Fournier
    0
  9. ipl Mensajes publicados 5738 Estado Colaborador de seguridad 585
     
    Hola Olivier, hola a todos,

    >Otro post también hablaba de un pequeño exe o com que daba la fecha
    del día bajo DOS, pero no puedo encontrarlo...
    ¿No sería de la época del 4 al 16 de noviembre? :-(

    @12C4
    Ipl
    0
  10. ipl Mensajes publicados 5738 Estado Colaborador de seguridad 585
     
    Hola saadmohamed,

    >Re Hola,
    >Tengo el prg, lo escribí en Fox, mide 9704 bytes, pero requiere un runtime un poco más voluminoso de 2 MB, no sé dónde enviar estos dos módulos,

    ¡Gracias por tu propuesta!
    ¿Podrías enviarme los 2 módulos a mi dirección de correo electrónico arriba (sustituyendo la 'à' por '@')? ¡gracias!
    Fox... ¿no es un compatible de dBase, pero con compilador -y runtime-?

    @12C4
    Ipl
    0
  11. ipl Mensajes publicados 5738 Estado Colaborador de seguridad 585
     
    ¡Vaya... estoy envejeciendo!

    ¡Todavía tengo gwbasic.exe, dBase III+ pero me doy cuenta de que ni siquiera sé cómo usarlos (para un pequeño utilitario)!
    ¡De todos modos, voy a intentarlo! ¡Válgame Dios!

    @12C4
    Ipl
    0
  12. ofournier.cbd Mensajes publicados 5862 Fecha de registro   Estado Miembro Última intervención   84
     
    Buenas noches,

    en dBase la función que retorna la fecha del sistema es date()
    hay otras ocho (día, mes, año, ...) utilizables en variables. Atención al bug del año 2000 con los años cortos (2 últimos dígitos/caracteres): dBase devuelve 01 como 1901, así que antes de 2000... !

    Tengo aplicaciones .PRG en lenguaje dBase III+ y dBase IV (idéntico a Clipper compilable), bajo DOS 3 a 6.22 (compatibles con setver) de un gran trabajo de SGBD que hice en 1991-92 utilizando todo tipo de variables de fecha, funciones y opciones para encontrar (búsquedas secuenciales) datos precisos en un momento específico en montones de bases integradas.

    Ejemplo:
    * ============================ TRANDAT.PRG ===================================
    * hecho por OF 16/3/91 como utilitario para JTOT, etc...
    * Transformación de una fecha (DATED2) en nombre de archivo DATEFIC.(mem, dbf,...)
    * sintaxis: 00_00_00.xxx macro: &DATEFIC (+".xxx")
    * ============================================================================

    ***************** versión numérica (intervalo determinado) *******************

    public DATOBS && * primera FECHA definida
    TJ1=day(FDATOBS) && * día (núm de 1 ... 31)
    TM1=month(FDATOBS) && * mes (1 ... 12)
    TANN=str(year(FDATOBS)) && * año de 90 ... ..)
    TAN=right(TANN,2) && * Caracteres
    VTA1=val(TAN) && * Numérico
    *------------------------ por ejemplo en rechagr.prg (adición -> f-adición)
    do case
    case TJ1 < 5 .and. TM1=1 && * límites
    TJ2=15 && *********
    TM2=12
    VTA2=VTA1 - 1
    case TJ1 < 5 .and. TM1 > 1
    TJ2=15
    TM2=TM1 - 1
    VTA2=VTA1
    case TJ1 > 5 .and. TJ1 <= 10 .and. TM1=1
    ************* etc....
    endcase
    CTA1=str(VTA2)
    DATAC=ltrim(str(TJ2))+"/"+ltrim(str(TM2))+"/"+ltrim(CTA1)

    DATAD=ctod(DATAC) && * nueva fecha límite

    return

    * *********************** versión caracteres (nombre de archivo) ****************

    *public DATED2,DATEFIC,DATEFICM && * por ejemplo jtot1.prg (adición, e-adición)

    TJO=day(CDATED2)
    TMO=month(CDATED2)
    TANN=str(year(CDATED2))
    TAN=right(TANN,2)

    DATEFIC=ltrim(str(TJO))+chr(95)+ltrim(str(TMO))+chr(95)+ltrim(TAN)
    * Forma del nombre del archivo: 1_1_90 o 10_10_90 (sufijo .MEM)

    DATEFICM=DATEFIC+".MEM" && guardado en S/directorio VAR-MEM
    return
    * ============================================================================

    ¿Te interesa más?

    Olivier Fournier
    0
  13. ipl Mensajes publicados 5738 Estado Colaborador de seguridad 585
     
    Buenas noches Subira, Olivier, buenas noches a todos,

    ¡Gracias Olivier! ;-)

    Subira... ¿tienes dBase III o superior?

    @12C4
    Ipl
    0
  14. M&amp;M Mensajes publicados 5058 Estado Colaborador 669
     
    ¿Puedo jugar también?
    Bueno, Bernadette, vas a buscar en http://www.rduff.com/ el pequeño programa Awk v3.20 y vas a crear el archivo de programa awk a continuación que llamaremos Bonjour.awk (pero puedes acortarlo como quieras y envolverlo en un archivo bat si lo deseas).

    #---------------------------------------------------------------------------
    # ARCHIVO: Bonjour.AWK
    # AUTOR: M&M
    # DESCRIPCIÓN:
    # Este programa crea una copia de un archivo dado como parámetro
    # añadiendo a su nombre la fecha y la hora y conservando su extensión
    # SINTAXIS: awk -f bonjour.AWK mifichero.doc
    # REQUISITOS:
    # El PC debe estar configurado para la fecha en formato belga o francés
    # (Country=032 o 033)
    # SALIDAS:
    # copia el archivo FICHIER.EXT bajo el nombre FICHIER_AAAAMMJJ.EXT
    # Crea y luego elimina un archivo temporal temp.tmp
    # VERSIÓN:
    # 1.0 20/11/02 M&M Creación
    #---------------------------------------------------------------------------

    BEGIN {
    TMP="TEMP.TMP" # Archivo temporal
    IN_FILE = toupper(ARGV[1]) # ARGC-1] # Nombre del archivo fuente
    if (ARGC<2 || index(IN_FILE, ".") ==0 ) {
    print "\nArchivo a copiar no definido o extensión faltante."
    print "Uso: awk -f bonjour.awk fichero.doc"
    Abort=1; exit }
    else {
    print "Para obtener la fecha" > TMP
    close (TMP)
    system ("dir /4 "TMP" > " TMP)
    # adquisición de la fecha y hora actuales de win98
    for (i=1;i<8;i++) {
    getline < TMP
    if (i> 4 && NF>=5) {
    Date=$4; Time=$5
    close(TMP)
    break
    }
    }
    if (i>7) {print "Error bonjour.awk: Fecha no encontrada."; Abort=1;exit}
    }
    match(IN_FILE,/\.[A-Za-z0-9\-_]+$/)
    FILE= substr(IN_FILE,1,RSTART-1)
    EXT=substr(IN_FILE,RSTART+1)
    split(Date,DD,"\/")
    Date=DD[3]DD[2]DD[1]
    NEW=FILE"_"Date"."EXT
    system ("copy "IN_FILE" "NEW)
    exit
    }
    #---------------------------------------------------------------------------

    Y aquí está, Subirou, creo que es horriblemente complicado en comparación con las herramientas de los shells de unix. Dejemos este ejercicio a los jóvenes, ¡ofou!
     :,§_ ç _
    (@)=(@)
    0
  15. saadmohamed Mensajes publicados 7 Estado Miembro
     
    Hola a todos,
    mi versión es la siguiente:
    *----------------------------------------------------------
    archivo de parámetros

    d = substr(dtoc(fecha()),7,4) + substr(dtoc(fecha()),4,2) + substr(dtoc(fecha()),1,2) + '.'

    erase &d
    rename &file to &d
    return
    *--------------------------------------
    el programa recibe un archivo como parámetro y lo renombra con la fecha del día,
    PD: este programa lo he compilado en Fox 2.6, y he generado un EXE,
    aún no tengo un correo electrónico para enviártelo,
    ¡Hola y hasta luego!
    0
  16. saadmohamed Mensajes publicados 7 Estado Miembro
     
    Hola

    Respondo a O. Fournier, que nunca se ha hablado de un bug en Dbase (solo hacemos el uso que queremos hacer), existe la instrucción SET CENTURY ON, que permite mostrar los años en 4 dígitos, lo que permite ingresar 2000 en lugar de 00 para 2000,
    Sigo teniendo algunas aplicaciones Dbase que funcionan desde hace una eternidad...
    saludos y @+
    0
  17. ofournier.cbd Mensajes publicados 5862 Fecha de registro   Estado Miembro Última intervención   84
     
    Hola,

    ¡GUAU! Afortunadamente, además, no estamos en el foro de PROGRAMACIÓN!

    Nos encontramos de vuelta en la dulce locura de dBase de Ashton Tate (y en el enorme trabajo de "La Commande Electronique"), los cuales fueron criticados duramente por el negocio loco (¡se acabaron también los Pascal y Turbo!).

    Volvamos solo a un pequeño detalle para saadmohamed:
    1) por supuesto por "set century on" de entrada (config.db)
    2) pero la función LUPDATE() (última fecha de acceso a una base *.DBF) me devuelve en pantalla: 1901 1902, etc... ¡Ay, las incrementaciones de estas fechas por variables para gestionar las bases y su acceso periódico!
    3) Y luego, como un idiota, había hecho decenas de aplicaciones con las fechas cortas: mi SGBD me devolvía desde antes de la guerra de 14... desde el 01/01/2000!

    Olivier Fournier
    0
    1. saadmohamed Mensajes publicados 7 Estado Miembro
       
      Hola a todos,
      Es cierto, acabo de comprobarlo, LUPDATE devuelve una información errónea (1902), podremos solucionarlo utilizando la fecha del sistema DOS, un Dir del directorio, seguido de un append from en un archivo DBF cuyo diseño de registro es el mismo que el de la línea Dir, y voilà, la fecha se recupera en 3 campos de datos que se pueden manipular como queramos…

      Saludos desde Casablanca soleado, @+
      0
  18. SUBIRA
     
    Buenas noches,

    Les agradezco a todos, intentaré clasificar todas sus respuestas, lo que es seguro es que no quiero instalar un run time en mi máquina!!!
    0
  19. M&amp;M Mensajes publicados 5058 Estado Colaborador 669
     
    Entonces, adopta mi pequeño script Awk.exe que pesa 47KB y crea un pequeño archivo DD.BAT que contiene esta línea:

    c:\util\awk -f c:\util\bonjour.awk %1

    Lo pones todo en un directorio c:\util o cualquier otro directorio que esté en el PATH y funcionará cuando escribas DD seguido del nombre del archivo a fechar.

    Pequeños errores corregidos: he utilizado la instrucción toupper que hace que el resultado esté en mayúsculas. (reemplazar toupper(ARGV[1] por ARGV[1])
    Otro error corregido: si la extensión contiene un carácter acentuado, fallará. (reemplazar [A-Za-z0-9\-_]+ por [^.]+ )
    Último error persistente: si el nombre contiene el signo =, mi programa no encontrará el archivo. (no hay solución)
    Una pequeña ventaja: si el archivo contiene más de un punto en el nombre, toma bien el último punto como separador de extensión
    Acepta también nombres largos y extensiones más largas que 3 caracteres.
     :,§_ ç _
    (@)=(@)
    0
  20. JM DEWALQUE Mensajes publicados 8 Estado Miembro
     
    Hola,

    Para la fecha generada por LUPDATE, es necesario añadir la siguiente instrucción al inicio del programa:

    SET EPOCH TO 1960 (o cualquier otra fecha clave)

    Esto indica a Clipper que cualquier fecha del tipo "18/05/04" debe ser interpretada como parte del año 2004 y no 1904, ya que EPOCH se establece en 1960. Sin embargo, una fecha cuyo número de año en 2 posiciones (xx) es anterior a "60" será considerada como "19xx" y no como "20xx".

    Lo mejor es utilizar:
    SET CENTURY ON
    lo que obliga al sistema a trabajar con el año expresado en 4 dígitos. Así, ya no hay ambigüedad para determinar el siglo en relación con un año expresado en 2 cifras.
    0
  • 1
  • 2