Encontré un error en mi script de DOS que usa datos de fecha y hora para nombrar archivos. El problema fue que terminé con una brecha porque la variable de tiempo no proporcionó automáticamente el cero inicial para la hora <10. Por lo tanto, la ejecución> echo% time% devuelve: '9: 29: 17.88'.
¿Alguien sabe de una manera de rellenar condicionalmente los ceros a la izquierda para solucionar esto?
Más información: Mi nombre de archivo set command es:
set logfile=C:\Temp\robolog_%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
que termina siendo: C: \ Temp \ robolog_20100602_ 93208.log (para las 9:23 de la mañana).
Esta pregunta está relacionada con esta .
Gracias
Respuestas:
Una forma muy simple es simplemente reemplazar el espacio inicial con cero:
echo %TIME: =0%
salidas:
09:18:53,45
fuente
set HH=%time:~-11,2% set MM=%time:~-8,2% set SS=%time:~-5,2% set ISOTIME=%HH: =0%-%MM%-%SS% echo %ISOTIME%
También vea ss64.com/nt/syntax-replace.htmlset timestring=%TIME: =0%
temprano en la sub llamada, luego solo trabaje con éltimestring
(o cualquier variable que use).Mi solución fue usar la siguiente idea:
fuente
but gives syntax error on server 2003
- ¿Por qué te importa eso en 2016?Idea similar a la respuesta de Dennis . El problema es que el ancho de
%time%
siempre es el mismo, por lo que inserta un espacio al principio en lugar de devolver una cadena más corta.Puede deshacerse de eso con
for
:El resto es más o menos lo mismo, entonces.
fuente
Usando la contribución de Jesse, acabo de crear una variable con el resultado modificado. Luego hago referencia a esa variable para construir la porción de hora.
Con la fuente original:
Gracias Jesse Hubiera votado si tuviera los puntos de reputación.
fuente
Para la solución más compacta que implementa todo lo anterior, creo que
funcionaría aquí sin agregar nuevas líneas al script. Sin embargo, es quizás menos elegante que las soluciones de comandos múltiples.
fuente
Lo siguiente toma algunas líneas más pero es claro y entendible. Guarda stdout y stderr para separar archivos, cada uno con una marca de tiempo. La marca de tiempo incluye año, mes, día, hora, minuto y segundo, en ese orden. Las marcas de tiempo siempre deben tener el componente de fecha más significativo primero (año) y el último componente (segundos) al final. Eso permite que los listados de archivos estén en orden de tiempo. Sin más preámbulos, aquí está mi solución.
fuente
Esto agrega un cero al comienzo de la hora y toma los dos últimos dígitos de la hora (las posiciones de inicio de minuto y segundo se desplazan por una). Entonces 3 AM se convierte en "03" luego "03" y la hora 15 se convierte en "015" luego "15".
Menos legible:
fuente
Una línea de código hará lo que necesita:
Por ejemplo, uso% Date% y luego agrego un cero inicial a una variable que uso para determinar si necesito reemplazar el espacio inicial con un cero para% Time%.
fuente
Esto crea una marca de tiempo ordenable y la segunda línea se asegura de que no haya espacios para una hora de un solo dígito, etc., para que pueda utilizarse para los scripts:
Salida:
fuente
Gracias a la ayuda de arriba ... Esto es lo que estoy usando:
Luego tengo registros que se llaman en trabajos de Robocopy como este:
Hay muchos como este:
Termina el trabajo con esto:
COMPLETE_LOG_2018-06-27_10_53_54.log
es el archivo producido al final y se puede ordenar por nombre de archivo.fuente
La respuesta de Jesse resolvió mi problema de cambio de nombre de archivo al eliminar el espacio en el campo de la hora. Así es como configuro mis variables:
Trabaja como un campeón; por alguna razón, la fecha no necesitaba el mismo tratamiento, pero imagino que eso se debe a la configuración regional.
fuente
fuente
fuente