En una secuencia de comandos por lotes de Windows (Windows XP) necesito formatear la fecha y hora actuales para su uso posterior en nombres de archivos, etc.
Es similar a la pregunta de desbordamiento de pila. Cómo agregar una fecha en archivos por lotes , pero también con tiempo.
Tengo esto hasta ahora:
echo %DATE%
echo %TIME%
set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
echo %datetimef%
lo que da:
28/07/2009
8:35:31.01
2009_07_28__ 8_36_01
¿Hay alguna manera de permitir una hora de un solo dígito en% TIME%, para poder obtener lo siguiente?
2009_07_28__08_36_01
windows
datetime
formatting
batch-file
laurie
fuente
fuente
datetimef
variable y poner 0 en su lugar. En su ejemplo:SET datetimef=%datetimef: =0%
Respuestas:
Terminé con este script:
:: En WIN2008R2, por ejemplo, necesitaba hacer su 'mes establecido =% fecha: ~ 3,2%' como a continuación :: de lo contrario, aparece 00 para el MES
fuente
fuente
Así es como genero un nombre de archivo de registro (basado en http://ss64.com/nt/syntax-getdate.html ):
fuente
Por lo general, lo hago de esta manera cada vez que necesito una cadena de fecha / hora:
Esto es para el formato de fecha / hora alemán (dd.mm.aaaa hh: mm: ss). Básicamente concateno las subcadenas y finalmente reemplazo todos los espacios con ceros.
Breve explicación de cómo funcionan las subcadenas:
Entonces, para obtener solo el año de una fecha como "29.03.2018" use:
fuente
Si PowerShell está instalado, puede obtener de manera fácil y confiable la Fecha / Hora en cualquier formato que desee, por ejemplo:
Por supuesto, hoy en día PowerShell siempre está instalado, pero en Windows XP probablemente solo quiera usar esta técnica si su script por lotes se está utilizando en un entorno conocido donde sabe que PS está disponible (o verifique su archivo por lotes si PowerShell está disponible) ...)
Puede preguntar razonablemente: ¿por qué usar un archivo por lotes? las cosas a la antigua usanza con archivos por lotes o (b) estás actualizando un script antiguo y no quieres portar todo a PS.
fuente
Encontré este problema hoy y lo resolví con:
Reemplaza los espacios con 0s y, básicamente, cero-pads por hora.
Después de una búsqueda rápida, no descubrí si requería extensiones de comando (aún funcionaba con SETLOCAL DISABLEEXTENSIONS).
fuente
:
)?echo %TIME: =:%
pero si no lo es, intenta escapar:
con un me^
gustaecho %TIME: =^:%
(que también funciona para mí).Como se ha observado, analizar la fecha y la hora solo es útil si conoce el formato que está utilizando el usuario actual (por ejemplo, MM / dd / aa o dd-MM-aaaa solo por nombrar dos). Esto podría determinarse, pero para cuando haga todo el énfasis y el análisis, aún terminará con alguna situación en la que se utiliza un formato inesperado, y serán necesarios más ajustes.
También puede usar algún programa externo que le devolverá una babosa de fecha en su formato preferido, pero que tiene las desventajas de necesitar distribuir el programa de utilidad con su script / lote.
También hay trucos por lotes que usan el reloj CMOS de una manera bastante cruda, pero eso está demasiado cerca de los cables pelados para la mayoría de las personas, y no siempre es el lugar preferido para recuperar la fecha / hora.
A continuación se muestra una solución que evita los problemas anteriores. Sí, presenta algunos otros problemas, pero para mis propósitos encontré que esta es la solución más fácil, más clara y más portátil para crear un sello de fecha en archivos .bat para sistemas Windows modernos. Este es solo un ejemplo, pero creo que verá cómo modificar para otros formatos de fecha y / o hora, etc.
fuente
reg query "HKCU\Control Panel\International" /v sShortDate
parte sin cambiar la configuración del registro (¡ejercicio que le queda al lector!).¿Lo siguiente puede no ser una respuesta directa sino una respuesta cercana?
Al menos puede ser inspirador.
fuente
Si no necesita exactamente este formato:
Luego, podría usar las siguientes 3 líneas de código que usan% date% y% time%:
Nota: Los caracteres
/
y:
se eliminan y el carácter.
y el espacio se reemplazan con un guión bajo.Ejemplo de salida (tomada el miércoles 8/5/15 a las 12:49 p.m. con 50 segundos y 93 milisegundos):
fuente
fuente
El
offset:length
formato compatible con elSET
comando en Windows no le permitirá rellenarlo0
como parece estar interesado.Sin embargo, puede codificar un script BATCH para verificar que la hora sea menor
10
yrellenar en consecuencia con una
echo
cadena diferente .Encontrará información sobre el
SET
comando en este enlace .También puede cambiar a otros métodos de programación para llegar aquí.
Es bastante simple en unix bash (disponible con Cygwin en Windows) simplemente decir,
Y, siempre se rellena correctamente.
fuente
Lo hice de esta manera:
fuente
La primera línea siempre sale en este formato con respecto a la zona horaria:
20150515150941.077000 + 120
Esto lo deja con solo formatear la salida para que se ajuste a sus deseos.
fuente
Este archivo bat (guardar como datetimestr.bat) produce la cadena de fecha y hora 3 veces: (1) cadena de fecha y hora larga con día de la semana y segundos, (2) cadena de fecha y hora corta sin ellas y (3) versión corta del código.
Para dar el crédito adecuado, fusioné los conceptos de Peter Mortensen (18 de junio de 14 a las 21:02) y opello (25 de agosto de 11 a las 14:27).
Puede escribir esto mucho más corto, pero esta versión larga facilita la lectura y comprensión del código.
fuente
¡Soy realmente nuevo en los archivos por lotes y este es mi código! (No estoy seguro de por qué, pero no pude combinar fecha / t y hora / t juntas y no pude usar % date% y % time% directamente sin una variable ...)
Se reutiliza de otros (la pregunta era obtener una fecha de hora formateada para usar como nombre de archivo).
fuente
Hay otra forma fácil de hacerlo:
fuente
Para generar una
YYYY-MM-DD hh:mm:ss
marca de tiempo (24 horas) utilizo:fuente
%TIME%
y%DATE%
utilizan el mismo formato que los comandosTIME
yDATE
, respectivamente. En mi sistema, las variables no coinciden con mi configuración regional.Este script por lotes hará exactamente lo que quiere el OP (probado en Windows XP SP3).
También utilicé ese ingenioso truco de registro descrito anteriormente por "jph", en el que, en mi humilde opinión, es la forma más sencilla de obtener un formato 100% coherente de la fecha
"yyyy_MM_dd"
en cualquier sistema Windows nuevo o antiguo. El cambio a un valor del Registro para hacer esto es instantáneo temporal y trivial; solo dura unos pocos milisegundos antes de que se revierta de inmediato.Haga doble clic en este archivo por lotes para obtener una demostración instantánea. Aparecerá la ventana del símbolo del sistema y mostrará su marca de tiempo. . . . .
fuente
fuente
Cree un archivo llamado "search_files.bat" y coloque el contenido a continuación en el archivo. Luego haga doble clic en él. La variable temporal% THH% se implementó para manejar la AM de manera adecuada. Si hay un 0 en los primeros 2 dígitos del tiempo, Windows ignora el resto del nombre del archivo LOG.
fuente
Me gusta la versión corta en la parte superior de @The lorax, pero para otras configuraciones de idioma puede ser ligeramente diferente.
Por ejemplo, en la configuración del idioma alemán (con formato de fecha natural: dd.mm.aaaa), la consulta del mes debe modificarse de 4,2 a 3,2:
fuente
Estos son mis 2 centavos por a
datetime string
. En losMM DD YYYY
sistemas, cambie la primera y la segunda%DATE:~
entrada.fuente
Intenté la respuesta aceptada y funciona bastante bien. Desafortunadamente, el formato de hora de EE. UU. Parece ser H: MM: SS.CS, y el 0 faltante en el frente estaba causando problemas de análisis antes de las 10 a.m. Para superar este obstáculo y también permitir el análisis de la mayoría de los formatos de hora mundial, se me ocurrió esta rutina simple que parece funcionar bastante bien.
Lo bueno de esta rutina es que pasa la cadena de tiempo como primer parámetro y el nombre de la variable de entorno que desea que contenga el tiempo (en centisegundos) como segundo parámetro. Por ejemplo:
(* Chris *)
fuente
Tal vez algo como esto:
fuente
En situaciones como esta, utilice un enfoque de programación simple y estándar: en lugar de gastar un gran esfuerzo en analizar una entidad desconocida, simplemente guarde la configuración actual, restablezca su estado conocido, extraiga la información y luego restaure el estado original. Use solo recursos estándar de Windows.
Específicamente, los formatos de fecha y hora se almacenan bajo la clave de registro HKCU \ Control Panel \ International \ en [valores de MS definición ":" sTimeFormat "y" sShortDate ". Reg es el editor de registro de consola incluido con todas las versiones de Windows. No se requieren privilegios elevados para modificar la clave HKCU
Simple, directo y debería funcionar para todas las regiones.
Por razones que no entiendo, restablecer el valor "sShortDate" tiene efecto inmediatamente en una ventana de consola, pero restablecer el valor muy similar "sTimeFormat" NO tiene efecto hasta que se abra una nueva ventana de consola. Sin embargo, lo único que se puede cambiar es el delimitador: las posiciones de los dígitos son fijas. Del mismo modo, se supone que la ficha de tiempo "HH" antepone los ceros iniciales, pero no lo hace. Afortunadamente, las soluciones son fáciles.
fuente
sTimeFormat
formato de hora es inútil . No Como afecta el aviso de la consola posterior, aplíquelo usandofor /f "delims=" %%G in ('cmd /C echo SET "DateTime=%%date%%__%%time%%"') do %%G
Este script utiliza una interfaz WMI a la que se accede principalmente a través de la herramienta WMIC, que es una parte integral de Windows desde Windows XP Professional (la edición Home también es compatible, pero la herramienta no está instalada de manera predeterminada). El script también implementa una solución alternativa de la falta de la herramienta WMIC al crear y llamar a un vbscript WSH para acceder a una interfaz WMI y escribir en la salida de la consola la hora con el mismo formato que proporciona la herramienta WMIC.
fuente
Un buen truco de una sola línea para evitar la expansión variable temprana es usar
cmd /c echo ^%time^%
fuente
fuente
Para una solución muy simple para la fecha numérica para usar en nombres de archivos, use el siguiente código:
fuente
Divida los resultados del comando de fecha por una barra diagonal, luego puede mover cada uno de los tokens a las variables apropiadas.
fuente