Tenemos un trabajo por lotes que se ejecuta todos los días y copia un archivo en una carpeta de recogida. También quiero tomar una copia de ese archivo y colocarlo en una carpeta de archivo con el nombre de archivo
yyyy-MM-dd.log
¿Cuál es la forma más sencilla de hacer esto en un trabajo por lotes de Windows?
Básicamente estoy buscando un equivalente de este comando de Unix:
cp source.log `date +%F`.log
windows
batch-file
cmd
timestamp
Eoin Campbell
fuente
fuente
Respuestas:
Pero depende de la configuración regional. No estoy seguro de si
%DATE%
está localizado o depende del formato especificado para la fecha corta en Windows.Aquí hay una forma independiente de la configuración regional para extraer la fecha actual de esta respuesta , pero depende de
WMIC
yFOR /F
:fuente
2014-5.-01
(cuando sería2014-05-26
). ¡Así que tenga mucho cuidado si publica scripts que contengan esto!%time:~-11,2%-%time:~-8,2%-%time:~-5,2%
Esto funcionó para mí y fue una solución segura para el nombre de archivo (aunque genera un formato MM-dd-YYYY):
El primer comando toma una FECHA y reemplaza
/
por-
, toma la HORA y reemplaza:
por-
, y los combina en formato FECHA @ HORA. La segundaset
declaración elimina cualquier espacio, y el terceroset
sustituye,
con.
y añade la.jpg
extensión.El código anterior se utiliza en un pequeño script que extrae imágenes de una cámara IP de seguridad para su posterior procesamiento:
fuente
10-12-2014@14-22-59,44.jpg
con una coma antes de los milisegundosset SAVESTAMP=%SAVESTAMP:,=.%.jpg
antes de laecho
declaración. Si eso funciona, actualizaré la respuesta.08.06.2016@15-42-20,33.jpg
en mi portátil alemán y[email protected]
en mi inglés.yyyy-MM-dd
SOLO para la configuración regional francesa (Francia) , tenga cuidado porque
/
aparece en la fecha:Para nuestro problema con el archivo de registro, aquí está mi propuesta SOLO para la configuración regional francesa :
fuente
"_0:00"
(el carácter subrayado es un espacio)Aquí hay una solución independiente de la configuración regional (cópiela en un archivo llamado SetDateTimeComponents.cmd):
Pongo todos mis scripts .cmd en la misma carpeta (% SCRIPTROOT%); cualquier script que necesite valores de fecha / hora llamará a SetDateTimeComponents.cmd como en el siguiente ejemplo:
Como muestra el ejemplo, puede llamar a SetDateTimeComponents.cmd siempre que necesite actualizar los valores de fecha / hora. Ocultar el script de análisis de tiempo en su propio archivo SetDateTimeComponents.cmd es una buena forma de ocultar los detalles desagradables y, lo que es más importante, evitar errores tipográficos.
fuente
prompt $d $t
devuelve 30.05.2016 15: 35: 56,93 en mi sistema.Debido a que la idea de desgarrarlos
%DATE%
y%TIME%
volverlos a mezclar parece frágil en el mejor de los casos, aquí hay una alternativa que usa un delineador PowerShell:La referencia de
get-date
está aquí , con opciones de formato tanto para el estilo .NET como para el estilo UNIX.fuente
Utilizo esto con frecuencia y pongo todo en un solo comando de copia. La siguiente copia example.txt como example_YYYYMMDD_HHMMSS.txt y, por supuesto, puede modificarlo para adaptarlo a su formato preferido. Las comillas solo son necesarias si hay espacios en la especificación de archivo. Si desea reutilizar exactamente la misma fecha / marca de tiempo, deberá almacenarla en una variable.
fuente
Esto asegurará que la salida sea un valor de 2 dígitos ... puede reorganizar la salida a su gusto y probar sin comentar la sección de diagnóstico. ¡Disfrutar!
(Tomé prestado mucho de esto de otros foros ...)
fuente
Cree un archivo con la fecha actual como nombre de archivo (por ejemplo, 2008-11-08.dat)
Con la fecha actual pero sin el "-" (ej. 20081108.dat)
fuente
Quizás esto pueda ayudar:
o
fuente
Reuní un pequeño programa en C para imprimir la marca de tiempo actual (seguro para la configuración regional, sin caracteres malos ...) Luego, uso el comando FOR para guardar el resultado en una variable de entorno:
Aquí hay un enlace:
https://github.com/HarryPehkonen/dos-timestamp
fuente
Sé que este hilo es antiguo, pero solo quiero agregar esto aquí porque me ayudó mucho a tratar de resolver todo esto y está limpio. Lo bueno de esto es que podría ponerlo en un bucle para un archivo por lotes que siempre se está ejecutando. Registro de tiempo de actividad del servidor o algo así. Para eso lo uso de todos modos. Espero que esto ayude a alguien algún día.
fuente
ERROR : Invalid Parameter #12 : "/LOG:C:\opt\Sync_08.10.2020_16:27:39.log"
como solución, usé guiones en su lugar:set FreshTime=%hour%-%min%-%secs%
Simplemente puede detectar el formato local actual y puede obtener la fecha en su formato, por ejemplo:
fuente
Sé que esta es una publicación antigua, pero hay una respuesta MUCHO más simple (aunque tal vez solo funcione en versiones más nuevas de Windows). Simplemente use el parámetro / t para los comandos DATE y TIME dos para mostrar solo la fecha o la hora y no le pida que la configure, así:
fuente
1) Puede descargar GNU coreutils que viene con la fecha GNU
2) puede usar VBScript , lo que facilita la manipulación de fechas en Windows:
Ejecute el script como:
fuente
Esto funciona bien con (mi) configuración regional alemana, debería ser posible ajustarlo a sus necesidades ...
fuente
%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
¡Funciona para la ubicación portuguesa también! Me refiero a AAAAMMDDPara archivos zip grandes para la implementación, utilizo un cuarto de hora. Nadie más en esta página lo había mencionado antes, así que pondré mi pequeño guión aquí:
Todavía no pone a cero los cuartos de hora desde la medianoche hasta las 5 a.m., pero aún lo hace para que pueda tener una liberación sellada varias veces al día con pocas colisiones.
Espero que ayude.
fuente
usó la sugerencia de Martin con un pequeño ajuste para agregar una marca de tiempo al nombre del archivo:
Para las 10:17:21 23/10/2019 El resultado es:
fuente