2009-11-17 8 views
8

Tengo problemas para generar una marca de tiempo en un archivo por lotes de Windows, porque obtengo diferentes formatos de fecha en diferentes versiones de Windows.Cómo obtener un archivo de proceso por lotes de Windows UNIVERSAL timestamp

Mi máquina:

>echo %date% 
>Tue 11/17/2009 

Amigos máquina:

>echo %date% 
>11/17/2009 

supongo que tiene que haber alguna manera de conseguir la fecha (11/17/2009) de ambas cadenas utilizando para/f . He estado intentando y buscando en Google y no puedo encontrar la respuesta.

¿Hay alguna otra forma de obtener una marca de tiempo sin utilizar% date%?

Respuesta

2

Uso VBScript si desea obtener la configuración de fecha y hora independientes:

thedate = Now 
yr = Year(thedate) 
mth = Month(thedate) 
dy = Day(thedate) 
hr = Hour(thedate) 
min = Minute(thedate) 
sec = Second(thedate) 
WScript.Echo yr&mth&dy&hr&min&sec 
+0

Esto es realmente muy útil usan dentro del guión de: > date.vbs cscript // Nologo (donde date.vbs contiene el código Ha incluido) – eliocs

+0

¿Esto no solo devuelve la fecha y hora local? La pregunta era generar la fecha y hora UTC, y es lo que estoy buscando. – Jim2B

1

Lamentablemente, no se puede hacer directamente, por lo que debe recurrir a hacks como GetDate.cmd.

Existen muchas herramientas de VBScript y de línea de comandos externas disponibles, lo cual no es algo de lo que dependa a menos que ya esté usando algo de esa naturaleza en su sistema en general.

Personalmente, estaría tratando de rodearlo usando PowerShell que deja de lado el problema por completo.

+0

Esta es una gran idea, pero ¿qué tipo de código de PowerShell haría esto? – Jim2B

+0

@ Jim2B En PS, puede obtener un objeto a través de [DateTime] :: UtcNow y luego participar en eso (por ejemplo, tiene una propiedad Month, etc.). ¿Es eso lo que querías decir? –

0

No es necesario VBScript. Puede hacerlo con algo como esto:

echo %date:~-10,2%/%date:~-7,2%/%date:~-4,4% 

Source

+2

¿no supone esto el formato de la salida de la variable de fecha? –

+0

Sí, esto supone que el formato de fecha local es de un cierto formato. – jamiebarrow

4

Salida doff.exe. Utilizo esto mucho para obtener marcas de tiempo para nombrar archivos de registro. Desde su sitio web:

DOFF imprime una fecha y hora formateadas, con un desplazamiento de fecha opcional, (por ejemplo, -1 imprime la fecha de ayer, +1 imprime la fecha de mañana). Para ver todas las opciones disponibles, ejecute "doff -h". Normalmente utilizo esta utilidad para cambiar el nombre de los archivos de registro para que incluyan una marca de tiempo (vea el tercer ejemplo a continuación). Este código debe compilarse en Unix/Linux, así como en DOS.

comandos de ejemplo:

C:\>doff 
19991108131135 

Sin parámetros la salida es la fecha/hora actual en el formato siguiente: yyyymmddhhmiss

C:\>doff mm/dd/yyyy 
11/08/1999 

En el ejemplo anterior se proporciona una especificación de formato de fecha.

@echo off 
for /f "tokens=1-3 delims=/ " %%a in ('doff mm/dd/yyyy -1') do (
set mm=%%a 
set dd=%%b 
set yyyy=%%c) 
rename httpd-access.log httpd-access-%yyyy%%mm%%dd%.log 

El archivo por lotes de ejemplo anterior muestra una clara forma de cambiar el nombre de un archivo de registro basado en la fecha de ayer.El comando "for" ejecuta doff para imprimir la fecha de ayer, (el parámetro "-1" especifica ayer), luego extrae cada componente de la fecha en las variables del archivo de proceso por lotes de DOS. El comando "renombrar" cambia el nombre de "httpd-access.log" a "httpd-acceso- [fecha de ayer] .log"


También puedes ver now.exe de Microsoft, disponible en el Windows Server 2003 Resource Kit Tools. Una de las cosas malas que descubrí (por las malas) es que establece el ERRORLEVEL en la cantidad de caracteres impresos.

se ve así:

c:\>now 

Thu May 19 14:26:45 2011 

Ayuda:

NOW : Display Message with Current Date and Time 

Usage : NOW [message to be printed with time-stamp] 

    NOW displays the current time, followed by its command-line arguments. 
    NOW is similar to the standard ECHO command, but with a time-stamp. 
0

Como ya he publicado aquí: Batch: Timestamp to UNIX Time

¿Qué hay de programa simple de 1 línea larga C regresar marca de tiempo UNIX? Puede recuperar el valor de% errorlevel% en el script por lotes.

#include <stdio.h> 
#include <time.h> 

int main(void) 
{ 
    return (int) time(NULL); 
} 

En mi prueba en el símbolo del sistema funcionó:

C:\Users\dabaran\Desktop\cs50\src\C>.\time || echo %errorlevel% && set mytstamp=%errorlevel% 
1419609373 

C:\Users\dabaran\Desktop\cs50\src\C>echo %mytstamp% 
1419609373 
Cuestiones relacionadas