2009-11-17 19 views
8

Ho problemi a generare un timestamp in un file batch di Windows, perché ottengo diversi formati di data su diverse versioni di Windows.Come ottenere un timestamp di file batch UNIVERSAL Windows

La mia macchina:

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

Amici macchina:

>echo %date% 
>11/17/2009 

Credo che ci deve essere un modo per ottenere la data (2009/11/17) da entrambe le stringhe utilizzando per/f . Ho provato e googling e non riesco a trovare la risposta.

C'è un altro modo per ottenere un timestamp senza utilizzare% date%?

risposta

2

Usa VBScript se si desidera ottenere Impostazioni di data indipendenti:

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

Questo è veramente utile utilizzata all'interno dello script da: > date.vbs cscript // Nologo (dove date.vbs contiene il codice è stato incluso) – eliocs

+0

Non ritiene questo solo restituire il datetime locale? La domanda era di generare il datetime UTC - ed è quello che sto cercando. – Jim2B

1

Sfortunatamente, non può essere eseguito direttamente, quindi è necessario ricorrere a hack come GetDate.cmd.

Sono disponibili anche molti VBScript e piccoli strumenti di riga di comando esterni, che non sono qualcosa su cui fare una dipendenza a meno che non si stia già utilizzando qualcosa del genere nel sistema generale.

Personalmente, proverei a girarci attorno usando PowerShell che elude perfettamente il problema completamente.

+0

Questo è un grande pensiero, ma che tipo di codice PowerShell farebbe questo? – Jim2B

+0

@ Jim2B In PS, è possibile ottenere un oggetto tramite [DateTime] :: UtcNow e quindi fare festa su quello (ad es. Ha una proprietà Month ecc.). E 'questo che intendevi? –

0

Non hai bisogno di VBScript. Si può fare con qualcosa di simile:

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

Source

+2

non presuppone il formato dell'output della variabile data? –

+0

Sì, si presuppone che la formattazione della data locale sia di un certo formato. – jamiebarrow

4

Partenza doff.exe. Lo uso molto per ottenere timestamp per la denominazione dei file di registro. Dal suo sito web:

DOFF stampa una data e un'ora formattate, con un offset di data opzionale (ad esempio, stampa la data di ieri, +1 stampa la data di domani). Per visualizzare tutte le opzioni disponibili, eseguire "doff -h". In genere utilizzo questa utilità per rinominare i file di registro in modo che includano un timestamp, (vedere il terzo esempio di seguito). Questo codice dovrebbe essere compilato sotto Unix/Linux, oltre a DOS.

comandi di esempio:

C:\>doff 
19991108131135 

Senza parametri l'uscita è la corrente data/ora nel seguente formato: yyyymmddhhmiss

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

Nell'esempio sopra viene data una specifica di formato data.

@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 

Il file batch di esempio mostra un modo pulito per rinominare un file di registro in base alla data di ieri sopra.Il comando "for" esegue doff per stampare la data di ieri, (il parametro "-1" specifica ieri), quindi estrae ciascun componente della data nelle variabili del file batch DOS. Il comando "rinomina" rinomina "httpd-access.log" a "httpd-ACCESS [la data di ieri] log"


controllare anche NOW.EXE di Microsoft, disponibile nel Windows Server 2003 Resource Kit Tools. Una cosa brutta che ho scoperto (nel modo più duro) è che imposta ERRORLEVEL sul numero di caratteri stampati.

appare come questa

c:\>now 

Thu May 19 14:26:45 2011 

Aiuto:

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

Come ho scritto qui: Batch: Timestamp to UNIX Time

Che dire semplice programma 1-linea lunga C ritorno timestamp UNIX? È possibile recuperare il valore da% errorlevel% nello script batch.

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

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

Nella mia prova nel prompt dei comandi ha funzionato:

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

C:\Users\dabaran\Desktop\cs50\src\C>echo %mytstamp% 
1419609373 
Problemi correlati