6
votes

Date du script de lot dans la variable

2011/04/

1 commentaires

Je reçois la date = 04/08 / 2011 - Il est basé sur vos paramètres Windows, n'est-ce pas?


8 Réponses :


18
votes

Vous n'obtenez pas ce que vous avez attendu parce que % date% renvoie la date actuelle à l'aide des paramètres Windows du "format de date courte". Ce paramètre est entièrement (sans fin) personnalisable.

Un utilisateur peut configurer son système pour afficher la date courte en tant que FRI040811; tandis qu'un autre utilisateur (même dans le même système) peut choisir le 08/04/2011. C'est un cauchemar complet pour un programmeur BAT.

Une solution possible consiste à utiliser WMIC , à la place. WMIC est l'interface de ligne de commande WMI avec WMI. WMI l'instrumentation de gestion de Windows est le http://fr.wikipedia.org/ wiki / windows_management_instrumentation xxx

renvoie la date de manière pratique de l'analyser directement avec un pour

Terminer l'analyse et mettre les pièces ensemble xxx


4 commentaires

Alternativement: pour / f %% A IN ('WMIC OS Obtenez localDateTime ^ | FindStr ^ [0-9]') DO (SET TS = %% A) & SET DateTime =% TS: ~ 0,8% -% TS: ~ 8,4% (ceci obtient un 20120623-1617 aux Pays-Bas en ce moment, donc, en écartant de tout fuseau horaire).


@Arjan: J'ai eu "~ 0,8ts: ~ 8,4" dans Aus avec ce% Date% format en CMD: 27/11/2012


@Pa Cela fonctionne, mais je reçois une erreur "opérande manquante" sur les paramètres de l'AUS (% Date% format dans cmd: 27/11/2012). Il produit C: ----> (SET / A TOWNY = 2012 * 10000 + 11 * 100 + 27)) ----> (SET / A TOWN = * 10000 + * 100 + Opérande manquante.


Ceci: ServerFault. com / questions / 227345 / ... a bien fonctionné pour moi.



1
votes

N'hésitez pas à utiliser cette manière que vous voulez

:: Date in year, day, month format

FOR /f "tokens=2-4 skip=1 delims=(-)" %%G IN ('echo.^|date') DO (
    FOR /f "tokens=2 delims= " %%A IN ('date /t') DO (
        SET v_first=%%G
        SET v_second=%%H
        SET v_third=%%I
        SET v_all=%%A
        )
    )

SET %v_first%=%v_all:~0,2%
SET %v_second%=%v_all:~3,2%
SET %v_third%=%v_all:~6,4%
SET DATE2= %MM%_%DD%_%YY%
ECHO. The date is: %DATE2%


0 commentaires

1
votes

Ne pouvez-vous pas simplement utiliser la ligne 1 suivante pour créer votre var (à l'aide de n'importe quel nom var)?

set ymd=%date:~6,4%/%date:~0,2%/%date:~3,2%


1 commentaires

Il dépend des paramètres régionaux et du format de la sortie du% de date de la date variable. Cela fonctionnera bien sur une seule machine, tant que personne ne joue avec les paramètres de date.



2
votes

C'est ce que j'utiliserais dans une machine XP Pro et plus élevé. XP Home n'a pas de WMIC.

:: timestamp YYYY-MM-DD_HH-MM-SS
@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a
set dt=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2%
echo %dt%
pause


1 commentaires

J'ai utilisé ceci dans un environnement Windows7. Je dois ajouter que cela donnera toujours le même résultat, quel que soit les paramètres locaux, pas de calcul impliqué et cela inclut le temps.



8
votes

J'ai dérivé le plus court des solutions déjà données. Cela fonctionne sur chaque système (xp pro et up): xxx

bien sûr, vous pouvez jouer avec le format de chaîne résultant.


0 commentaires

3
votes

Je pense que c'est ce que vous voulez:

@echo off
:MENU
CLS
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set xsukax=%%a
echo Year=%xsukax:~0,4%
echo Month=%xsukax:~4,2%
echo Day=%xsukax:~6,2%
echo hour=%xsukax:~8,2%
echo Minutes=%xsukax:~10,2%
echo seconds=%xsukax:~12,2%

pause
goto MENU


0 commentaires

0
votes
for /f %%a in ('wmic os get localdatetime ^| find "."') do set dts=%%a
set ymd=%dts:~0,8%
set hour=%dts:~8,6%

0 commentaires

0
votes

Le script suivant donnera du temps local avec des informations de TimeZone (TZ), à la fois vrai ISO8601 et format humain (no 'T'). Il convertit le décalage TZ en minutes dans le format HHMM requis par ex. 2019-01-25T08: 26: 55.347 + 1300 code> et 2019-01-25 08: 26: 55.347 + 1300 code> pour NZ avec DST.

@echo off
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
set ccyy_mm_dd=%ldt:~0,4%-%ldt:~4,2%-%ldt:~6,2%
set hh_mm_ss=%ldt:~8,2%:%ldt:~10,2%:%ldt:~12,2%
set _fff=%ldt:~14,4%
set tzsign=%ldt:~21,1%
set tzmins=%ldt:~22%
set /a tzHH=(%tzmins%/60)
set /a tzMM=(%tzmins%-(%tzHH%*60))
set /a tzHH=100 + %tzHH%
set tzHH=%tzHH:~1,2%
set /a tzMM=100 + %tzMM%
set tzMM=%tzMM:~1,2%
set ldt=%ccyy_mm_dd% %hh_mm_ss%%_fff%%tzsign%%tzHH%%tzMM%
set ldt8601=%ccyy_mm_dd%T%hh_mm_ss%%_fff%%tzsign%%tzHH%%tzMM%
echo %ldt%
echo %ldt8601%


0 commentaires