570 votes

Comment obtenir de l'actuel datetime sur la ligne de commande de Windows, dans un format adapté pour l'utilisation dans un nom de fichier?

Est-ce qu'une ligne de commande de Windows déclaration(s) que je peux utiliser pour obtenir le courant datetime dans un format que je puisse le mettre dans un nom de fichier?

Je veux avoir un .fichier bat qui se zippe jusqu'à un répertoire dans une archive avec la date et l'heure dans le nom, par exemple, Code_2008-10-14_2257.zip. Est-il un moyen facile je peux le faire, indépendamment des paramètres régionaux de l'ordinateur?

Je n'ai pas vraiment d'avis sur le format de la date, dans l'idéal, il serait aaaa-mm-jj, mais quelque chose de simple est bien.

Jusqu'à présent, j'ai, sur ma machine me donne de l' Tue_10_14_2008_230050_91:

rem Get the datetime in a format that can go in a filename.
set _my_datetime=%date%_%time%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%

rem Now use the timestamp by in a new ZIP file name.
"d:\Program Files\7-Zip\7z.exe" a -r Code_%_my_datetime%.zip Code

Je peux vivre avec cela, mais il semble un peu maladroit. Idéalement, il serait plus courts, et ont le format mentionné plus tôt.

Je suis à l'aide de Windows Server 2003 et Windows XP Professionnel. Je ne veux pas installer d'autres utilitaires pour le faire (bien que j'ai réaliser il y en a qui vont faire de belles formatage de la date).

696voto

Jay Points 20373

Voir Windows Fichier De Commandes (.chauve-souris) pour obtenir la date du jour au format JJMMAAAA.:

@echo off
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a%%b)
echo %mydate%_%mytime%

Si vous préférez le temps dans 24h/format militaire, vous pouvez remplacer la deuxième ligne avec ceci:

For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)

C:> .\date.chauve-souris
2008-10-14_0642

Si vous souhaitez que la date, indépendamment de la région (jour/mois commande, vous pouvez utiliser le bouton "WMIC os GET LocalDateTime" comme une source, puisque c'est dans la norme ISO ordre:

@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 ldt=%ldt:~0,4%-%ldt:~4,2%-%ldt:~6,2% %ldt:~8,2%:%ldt:~10,2%:%ldt:~12,6%
echo Local date is [%ldt%]

C:>de test.cmd
Date locale est [2012-06-19 10:23:47.048]

EDIT: Ajout de l'heure ainsi que la date de l'origine de la demande dans votre question EDIT: Ajout d'une région indépendante de variation à l'aide de WMIC

117voto

Uri Liebeskind Points 461

Au niveau régional indépendant date du temps d'analyse

Le format de sortie de l' %DATE% et de la dir de commande est à l'échelle régionale dépendante et donc ni solide, ni intelligent. date.exe (une partie de UnxUtils) fournit toutes les informations de date et heure dans tout pensable format. Vous pouvez aussi extraire les informations de date/heure à partir de n'importe quel fichier avec date.exe.

Exemples: (dans un cmd-utiliser un script %% au lieu de %)

date.exe +"%Y-%m-%d"
2009-12-22

date.exe +"%T"
18:55:03

date.exe +"%Y%m%d %H%M%S: Any text"
20091222 185503: le texte

date.exe +"Text: %y/%m/%d-any text-%H.%M"
Texte: 09/12/22-texte-ŕ 18.55

Command: date.exe +"%m-%d """%H %M %S """"
07-22 "18:55:03"`

Les informations de date/heure à partir d'un fichier de référence:
date.exe -r c:\file.txt +"The timestamp of file.txt is: %Y-%m-%d %H:%M:%S"

L'utiliser dans un script CMD pour obtenir l'année, le mois, le jour, l'heure de l'information:

for /f "tokens=1,2,3,4,5,6* delims=," %%i in ('C:\Tools\etc\date.exe +"%%y,%%m,%%d,%%H,%%M,%%S"') do set yy=%%i& set mo=%%j& set dd=%%k& set hh=%%l& set mm=%%m& set ss=%%n

En l'utilisant dans un CMD script pour obtenir le timestamp dans n'importe quelle format:

for /f "tokens=*" %%i in ('C:\Tools\etc\date.exe +"%%y-%%m-%%d %%H:%%M:%%S"') do set timestamp=%%i

Extraire les informations de date/heure à partir d'un fichier de référence.

for /f "tokens=1,2,3,4,5,6* delims=," %%i in ('C:\Tools\etc\date.exe -r file.txt +"%%y,%%m,%%d,%%H,%%M,%%S"') do set yy=%%i& set mo=%%j& set dd=%%k& set hh=%%l& set mm=%%m& set ss=%%n

L'ajout d'un fichier de ses informations de date/heure:

for /f "tokens=*" %%i in ('C:\Tools\etc\date.exe -r file.txt +"%%y-%%m-%%d.%%H%%M%%S"') do ren file.txt file.%%i.txt

date.exe est la partie de la libre outils GNU qui n'ont besoin d'aucune installation.

REMARQUE: la Copie date.exe dans n'importe quel répertoire qui est dans le chemin de recherche peut causer d'autres l'échec de scripts qui utilisent Windows intégré- date commande.

116voto

npocmaka Points 7794

Plus de deux manières qui ne dépend pas des paramètres de l'heure (les deux prises à partir de :Comment obtenir les données/temps indépendant de la localisation:).Et les deux également obtenir le jour de la semaine et aucun d'entre eux nécessite des autorisations d'administrateur!:

1.MAKECAB - fonctionnera sur TOUS les système de windows (rapide mais crée un petit fichier temporaire ) (le foxidrive script):

@echo off
pushd "%temp%"
makecab /D RptFileName=~.rpt /D InfFileName=~.inf /f nul >nul
for /f "tokens=3-7" %%a in ('find /i "makecab"^<~.rpt') do (
   set "current-date=%%e-%%b-%%c"
   set "current-time=%%d"
   set "weekday=%%a"
)
del ~.*
popd
echo %weekday% %current-date% %current-time%
pause

2. ROBOCOPY - il n'est pas natif de commande pour windows xp et win 2003, mais peut être téléchargé sur le site de microsoft .Mais est intégré dans tout, de la Vista et au-dessus:

 @echo off
setlocal 
for /f "skip=8 tokens=2,3,4,5,6,7,8 delims=: " %%D in ('robocopy /l * \ \ /ns /nc /ndl /nfl /np /njh /XF * /XD *') do (
 set "dow=%%D"
 set "month=%%E"
 set "day=%%F"
 set "HH=%%G"
 set "MM=%%H"
 set "SS=%%I"
 set "year=%%J"
)

echo Day of the week: %dow%
echo Day of the month : %day%
echo Month : %month%
echo hour : %HH%
echo minutes : %MM%
echo seconds : %SS%
echo year : %year%
endlocal

Et trois de plus de moyens qu'utilise windows autres langages de script.On vous donnera plus de flexibilité par exemple, vous pouvez obtenir la semaine de l'année, le temps en millisecondes et ainsi de suite.

3.JSCRIPT/LOT hybride (il faut être enregistré en tant que .bat).Jscript est disponible sur tous les systèmes forme NT et au-dessus , comme une partie de windows script host (même si elle peut être désactivée par le registre, il est un cas rare):

@if (@X)==(@Y) @end /* ---Harmless hybrid line that begins a JScript comment

@echo off
cscript //E:JScript //nologo "%~f0"
exit /b 0
*------------------------------------------------------------------------------*/

function GetCurrentDate() {
        // Today date time which will used to set as default date.
        var todayDate = new Date();
        todayDate = todayDate.getFullYear() + "-" +
                       ("0" + (todayDate.getMonth() + 1)).slice(-2) + "-" +
                       ("0" + todayDate.getDate()).slice(-2) + " " + ("0" + todayDate.getHours()).slice(-2) + ":" +
                       ("0" + todayDate.getMinutes()).slice(-2);

        return todayDate;
    }

WScript.Echo(GetCurrentDate()); 

4.VSCRIPT/LOT hybride (Est-il possible d'incorporer et d'exécuter VBScript dans un fichier de commandes sans l'aide d'un fichier temporaire?) même cas que jscript , mais l'hybridation n'est pas si parfaite:

:sub echo(str) :end sub
echo off
'>nul 2>&1|| copy /Y %windir%\System32\doskey.exe %windir%\System32\'.exe >nul
'& echo current date:
'& cscript /nologo /E:vbscript "%~f0"
'& exit /b

'0 = vbGeneralDate - Default. Returns date: mm/dd/yy and time if specified: hh:mm:ss PM/AM.
'1 = vbLongDate - Returns date: weekday, monthname, year
'2 = vbShortDate - Returns date: mm/dd/yy
'3 = vbLongTime - Returns time: hh:mm:ss PM/AM
'4 = vbShortTime - Return time: hh:mm

WScript.echo  Replace(FormatDateTime(Date,1),", ","-") 

5.POWERSHELL - peut être installé sur chaque machine .net - téléchargement de Microsoft (v1 , v2 , v3 (uniquement pour win7 et ci-dessus)).Installé par défaut sur tout formulaire de Win7/Win2008 et ci-dessus :

C:\>powershell get-date -format "{dd-MMM-yyyy HH:mm}"

plus d'informations sur la fonction get-date.

44voto

vMax Points 261

Voici une variante de la touche alt.ms-dos.lot.nt qui fonctionne local de façon indépendante.

Mettez ceci dans un fichier texte, par exemple, getDate.cmd

-----------8<------8<------------ snip -- snip ----------8<-------------
    :: Works on any NT/2k machine independent of regional date settings
    @ECHO off
    SETLOCAL ENABLEEXTENSIONS
    if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4)
    for /f "tokens=2-4 delims=(-)" %%a in ('echo:^|date') do (
      for /f "tokens=%toks% delims=.-/ " %%i in ('date/t') do (
        set '%%a'=%%i
        set '%%b'=%%j
        set '%%c'=%%k))
    if %'yy'% LSS 100 set 'yy'=20%'yy'%
    set Today=%'yy'%-%'mm'%-%'dd'% 
    ENDLOCAL & SET v_year=%'yy'%& SET v_month=%'mm'%& SET v_day=%'dd'%

    ECHO Today is Year: [%V_Year%] Month: [%V_Month%] Day: [%V_Day%]

    :EOF
-----------8<------8<------------ snip -- snip ----------8<-------------

Pour obtenir le code fonctionne sans erreur de msg sur stderr, j'ai dû ajouter les guillemets simples arount les affectations de variables pour%%, %%b et %c%. Mes paramètres régionaux (PT) a été à l'origine des erreurs à une étape de la boucle/analyse où des trucs comme "set =20" a l'obtention d'exécution. Les citations de rendement d'un jeton (même vide) pour le membre de gauche de l'instruction d'affectation.

L'inconvénient, c'est le désordre variable locale noms: "aa", " mm " et "dd". Mais bon, qui s'en soucie!

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