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à

  • Connessione di una LAN a un server OpenVPN tramite un gateway client Windows 7
  • Servizi Windows Server 2008 x86 per Unix SDK (SUA) RSH
  • Come posso visualizzare le size della coda di invio e ricezione TCP in Windows?
  • Sconosciuti e sconosciuti log di successo di RDP in EventViewer
  • Devo creare una networking per un call center
  • Domain login molto lento 10+ minuti
  •  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.

  • C'è un modo per cambiare le password su più server contemporaneamente?
  • Come posso creare una connessione ODBC da file .bat in Windows?
  • Perché la robocopy richiede 8 ore per trasferire un file di 70-80gb?
  • Come ripristinare l'attributo compresso sui file in Windows per un'intera unità
  • Elaborazione batch su Linux
  • 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.