Renombrar un archivo con la fecha del día
Subira
-
oopapf Mensajes publicados 2 Estado Miembro -
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
Siguiente
-
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 -
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 -
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 @+ -
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 -
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 -
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 -
Hola a todos
Gracias por sus respuestas esclarecedoras.
Estoy interesado en el pequeño programa que hace eso, ¡aunque solo tenga 8 caracteres!
JMS -
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 -
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 -
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 -
¡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 -
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 -
Buenas noches Subira, Olivier, buenas noches a todos,
¡Gracias Olivier! ;-)
Subira... ¿tienes dBase III o superior?
@12C4
Ipl -
¿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!
:,§_ ç _
(@)=(@) -
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! -
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 @+ -
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-
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, @+
-
-
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!!! -
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.
:,§_ ç _
(@)=(@) -
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.
- 1
- 2
Siguiente