221 votes

Formatage de la date et de l'heure dans un script Windows batch.

Dans un script batch Windows (Windows XP), j'ai besoin de formater la date et l'heure actuelles pour une utilisation ultérieure dans les noms de fichiers, etc.

C'est similaire à la question de Stack Overflow Comment ajouter une date dans des fichiers batch mais aussi du temps.

J'ai ceci jusqu'à présent :

echo %DATE%
echo %TIME%
set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
echo %datetimef%

ce qui donne :

28/07/2009
 8:35:31.01
2009_07_28__ 8_36_01

Existe-t-il un moyen de prendre en compte une heure à un chiffre dans %TIME%, afin d'obtenir ce qui suit ?

2009_07_28__08_36_01

0 votes

Vous pouvez remplacer les espaces vides sur votre datetimef et mettez des 0 à la place. Dans votre exemple : SET datetimef=%datetimef: =0%

162voto

laurie Points 1917

Je me suis retrouvé avec ce script :

set hour=%time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
echo hour=%hour%
set min=%time:~3,2%
if "%min:~0,1%" == " " set min=0%min:~1,1%
echo min=%min%
set secs=%time:~6,2%
if "%secs:~0,1%" == " " set secs=0%secs:~1,1%
echo secs=%secs%

set year=%date:~-4%
echo year=%year%

: : Sur WIN2008R2 par exemple, j'ai dû faire votre 'set month=%date:~3,2%' comme ci-dessous ::sinon 00 apparaît pour le mois.

set month=%date:~4,2%
if "%month:~0,1%" == " " set month=0%month:~1,1%
echo month=%month%
set day=%date:~0,2%
if "%day:~0,1%" == " " set day=0%day:~1,1%
echo day=%day%

set datetimef=%year%%month%%day%_%hour%%min%%secs%

echo datetimef=%datetimef%

11 votes

Pour info, sur Windows Server 2003 et sur Windows 7, ce script m'a donné "201200Mo_085806" (année et heure correctes).

54 votes

Comme note pour quelqu'un qui viendra ici depuis Google (comme moi) : Ceci dépend de la locale, donc il peut nécessiter des ajustements pour fonctionner sur des Windows non-anglais !

0 votes

Je l'ai fait de cette façon : Time /T > Time.dat set /P ftime= < Time.dat set fDate=%date:~6%%date:~3,2%%date:~0,2%%ftime:~0,2%%ftime:~3,2% echo %fDate% -> 201310170928

78voto

nightcoder Points 4604

Voici comment je génère un nom de fichier journal (sur la base de http://ss64.com/nt/syntax-getdate.html ):

@ECHO OFF
:: Check WMIC is available
WMIC.EXE Alias /? >NUL 2>&1 || GOTO s_error

:: Use WMIC to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
   IF "%%~L"=="" goto s_done
      Set _yyyy=%%L
      Set _mm=00%%J
      Set _dd=00%%G
      Set _hour=00%%H
      SET _minute=00%%I
      SET _second=00%%K
)
:s_done

:: Pad digits with leading zeros
      Set _mm=%_mm:~-2%
      Set _dd=%_dd:~-2%
      Set _hour=%_hour:~-2%
      Set _minute=%_minute:~-2%
      Set _second=%_second:~-2%

Set logtimestamp=%_yyyy%-%_mm%-%_dd%_%_hour%_%_minute%_%_second%
goto make_dump

:s_error
echo WMIC is not available, using default log filename
Set logtimestamp=_

:make_dump
set FILENAME=database_dump_%logtimestamp%.sql
...

5 votes

La meilleure réponse sur SO pour les questions sur la génération d'horodatage indépendante de la localisation dans un lot.

2 votes

Génial ! Il devrait y avoir un moyen de marquer ceci comme la solution.

0 votes

C'est la meilleure réponse. fonctionne avec Windows 7 et 10 espagnol

73voto

mrt Points 1919

Je procède généralement de cette manière lorsque j'ai besoin d'une chaîne de date/heure :

set dt=%DATE:~6,4%_%DATE:~3,2%_%DATE:~0,2%__%TIME:~0,2%_%TIME:~3,2%_%TIME:~6,2%
set dt=%dt: =0%

Il s'agit du format de date/heure allemand ( dd.mm.yyyy hh:mm:ss ). En gros, je concatène les sous-chaînes et remplace finalement tous les espaces par des zéros.

La chaîne résultante a le format : yyyy_mm_dd__hh_mm_ss


Brève explication du fonctionnement des sous-chaînes :

%VARIABLE:~num_chars_to_skip,num_chars_to_keep%

Ainsi, pour obtenir uniquement l'année à partir d'une date comme "29.03.2018", utilisez :

%DATE:~6,4%
       ^-----skip 6 characters
         ^---keep 4 characters

72voto

@ECHO OFF
: Sets the proper date and time stamp with 24Hr Time for log file naming
: convention ('YYYYMMDD_HHMMSS')

: Scrapes the characters out of their expected permissions in the date/time
: environment variables.

: Expects a date format of '____MM_DD_YYYY'
: Expects a time format of 'HH:MM:SS' or ' H:MM:SS'

SET HOUR=%time:~0,2%
SET dtStamp9=%date:~-4%%date:~4,2%%date:~7,2%_0%time:~1,1%%time:~3,2%%time:~6,2% 
SET dtStamp24=%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%

if "%HOUR:~0,1%" == " " (SET dtStamp=%dtStamp9%) else (SET dtStamp=%dtStamp24%)

ECHO %dtStamp%

PAUSE

45voto

G. Lombard Points 578

Si PowerShell est installé, vous pouvez obtenir facilement et de manière fiable la date et l'heure dans le format de votre choix, par exemple :

for /f %%a in ('powershell -Command "Get-Date -format yyyy_MM_dd__HH_mm_ss"') do set datetime=%%a
move "%oldfile%" "backup-%datetime%"

Bien sûr, de nos jours, PowerShell est toujours installé, mais sous Windows XP, vous ne voudrez probablement utiliser cette technique que si votre script batch est utilisé dans un environnement connu où vous savez que PS est disponible (ou vérifiez dans votre fichier batch si PowerShell est disponible...).

Vous pouvez raisonnablement vous demander : pourquoi utiliser un fichier batch si vous pouvez utiliser PowerShell pour obtenir la date et l'heure, mais je pense que certaines raisons évidentes sont les suivantes : (a) vous n'êtes pas si familier avec PowerShell et préférez encore faire la plupart des choses à l'ancienne avec des fichiers batch ou (b) vous mettez à jour un ancien script et ne voulez pas porter l'ensemble vers PS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X