Locale-ignara% DATE% e% TIME% nei file batch?

Le variables di ambiente %DATE% e %TIME% forniscono la data e l'ora correnti sulle macchine Windows nella row di command e all'interno di un file batch.

Purtroppo, questi valori sono locali-consapevoli! Significa che, per esempio, su una macchina tedesca, si otterrà

  • Come redirect il traffico a un IP a un altro IP in Windows Server 2008
  • Inoltro DNS AD all'ISP
  • Fissare testardo 'Impostazione locale non rioutput'.
  • Il problema di Windows 2008-R2 è stato rilasciato
  • Will IE submit un biglietto Kerberos se non in un dominio?
  • Anche amministratore cant registrare ASP.NET 4
  •  26.1.2011 

    invece di

     2011-26-01 

    questo annulla l'sorting se si desidera utilizzare questa variabile in un nome di file.

    C'è un modo semplice per get una string di date YYYY-MM-DD di un locale non YYYY-MM-DD in un file batch di Windows?

    Per il momento, sto lavorando con questa soluzione piuttosto kludgy:

     for /f "tokens=1,2,3,4 delims=. " %%i in ('date /t') do set date=%%k-%%j-%%i echo %date% 

    ma questo è ora locale locale tedesco – ovviamente, una soluzione completamente indipendente sarebbe molto più bella.

    Il sistema operativo in questione è Server 2008. Preferirei non utilizzare uno strumento di terze parti, se ansible.

  • cercando di copiare i gruppi di protezione in un utente utilizzando l'utilità del gruppo dsmod in AD
  • C'è un modo per cambiare le password su più server contemporaneamente?
  • Esegui un command remoto su un Mac da Windows
  • Criteri di gruppo applicabili solo una volta?
  • wevtutil richiede l'esecuzione come amministratore per il registro di protezione (ma non per il sistema) o come eseguire come amministratore per l'attività
  • Ottieni la directory contenente lo script batch attualmente eseguito
  • 2 Solutions collect form web for “Locale-ignara% DATE% e% TIME% nei file batch?”

    C'erano alcuni tentativi ( Rob van der Woude aveva qualcosa), ma niente funzionava in tutti i locali. Tuttavia, è ansible get l'ora corrente in un formato facilmente analizzabile via

     wmic os get LocalDateTime 

    Di seguito vengono già alless UTC:

     @echo off rem Get the time from WMI - at least that's a format we can work with set X= for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do if not defined X set X=%%x echo.%X% rem dissect into parts set DATE.YEAR=%X:~0,4% set DATE.MONTH=%X:~4,2% set DATE.DAY=%X:~6,2% set DATE.HOUR=%X:~8,2% set DATE.MINUTE=%X:~10,2% set DATE.SECOND=%X:~12,2% set DATE.FRACTIONS=%X:~15,6% set DATE.OFFSET=%X:~21,4% echo %DATE.YEAR%-%DATE.MONTH%-%DATE.DAY% %DATE.HOUR%:%DATE.MINUTE%:%DATE.SECOND%.%DATE.FRACTIONS% 

    Tuttavia, probabilmente dovrai considerare l'offset del fuso orario (a less che non sia per un file di registro, quindi avrei sempre utilizzato UTC), ma questo non è niente di che un calcolo in grado di fare 🙂

    Ecco un binario a due linee che ho usato, che sembra funzionare indipendentemente dalle impostazioni di versione di Windows o di ora locale:

     FOR /f %%a in ('WMIC OS GET LocalDateTime ^| find "."') DO set DTS=%%a set CUR_DATE=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2% 

    In questo modo verrà impostata una variabile denominata% CUR_DATE% nel seguente formato standard ISO:

     yyyy-mm-dd 

    Ho provato a farlo un & liner con &&, ma non sembrava prendere, quindi ho ricorso alla versione a due linee. Spero che questo ti aiuti.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.