Comment obtenir la date / heure actuelle sur la ligne de commande Windows dans un format approprié pour une utilisation dans un nom de fichier / dossier?

540

Mise à jour: Maintenant que nous sommes en 2016, j'utiliserais PowerShell pour cela, sauf s'il y a une raison vraiment rétrocompatible pour cela, en particulier en raison du problème des paramètres régionaux avec l'utilisation date. Voir le https://stackoverflow.com/a/19799236/8479 de @ npocmaka


Quelle (s) instruction (s) de ligne de commande Windows puis-je utiliser pour obtenir la date / heure actuelle dans un format que je peux insérer dans un nom de fichier?

Je veux avoir un fichier .bat qui zippe un répertoire dans une archive avec la date et l'heure actuelles dans le nom, par exemple Code_2008-10-14_2257.zip,. Existe-t-il un moyen simple de le faire, indépendamment des paramètres régionaux de la machine?

Le format de la date ne me dérange pas vraiment, idéalement ce serait aaaa-mm-jj, mais tout ce qui est simple est bien.

Jusqu'à présent, j'ai ceci, qui sur ma machine me donne 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 ça, mais ça semble un peu maladroit. Idéalement, il serait plus bref et aurait le format mentionné précédemment.

J'utilise Windows Server 2003 et Windows XP Professionnel. Je ne veux pas installer d'utilitaires supplémentaires pour y parvenir (bien que je réalise qu'il y en a qui feront un bon formatage de date).

Rory
la source
7
Vous créez une sauvegarde automatisée de votre code? Bien pour vous! On devrait faire ça aussi :)
Andrei Rînea
24
utiliser des gens Powershell ...[datetime]::now.tostring("yyyy-MM-dd")
Nacht - Rétablir Monica
Est-il possible de charger des fichiers avec la date de création à l'aide de xp_cmdshell dans SQL Server? J'ai posé une question sur stackoverflow, veuillez consulter le lien @ stackoverflow.com/q/32293517/3327081
kolunar

Réponses:

667

Voir Fichier batch Windows (.bat) pour obtenir la date actuelle au format MMDDYYYY :

@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 l'heure au format 24 heures / militaire, vous pouvez remplacer la deuxième ligne FOR par ceci:

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

C:>. \ Date.bat
2008-10-14_0642

Si vous voulez la date indépendamment de l'ordre de jour / mois de la région, vous pouvez utiliser "WMIC os GET LocalDateTime" comme source, car elle est dans l'ordre ISO:

@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:> test.cmd
La date locale est [2012-06-19 10: 23: 47.048]

Geai
la source
44
Pour les gens du Royaume-Uni, vous aurez envie For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%b-%%a)de la deuxième ligne.
Rory
17
Cette solution dépend des paramètres régionaux, Rory a donné l'exemple pour le Royaume-Uni pour d'autres paramètres régionaux où la date est le 22-02-2012, vous devez remplacer delims = / avec delims = -
Nuno Furtado
25
Sur mon système,% TIME% renvoie des valeurs comme "0:01:15" et "3:15:12" et le code %% a %% b dans la réponse donne un espace de tête comme "001" et "315". Pour obtenir un hhmm à quatre chiffres, utilisez ceci: For /f "tokens=1-2 delims=/: " %%a in ("%TIME%") do (if %%a LSS 10 (set mytime=0%%a%%b) else (set mytime=%%a%%b))Cela renvoie des valeurs comme "0001" et "0315" que je préfère dans mes noms de fichiers.
twamley
10
Belle version de la wmiccommande! Jusqu'à présent, je l'ai seulement vu WMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table. De même, pour accéder 20120623-1619à mon fuseau horaire local d'Amsterdam, en une seule ligne:for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a) & set datetime=%ts:~0,8%-%ts:~8,4%
Arjan
5
Pour moi, cela dit%%a was unexpected at this time.
Scott zuz22 Blacklock
109

Analyse de la date et de l'heure indépendante de la région

Le format de sortie de %DATE%et de la dircommande dépend de la région et n'est donc ni robuste ni intelligent. date.exe (qui fait partie d' UnxUtils ) fournit toutes les informations de date et d'heure dans n'importe quel format pensable. Vous pouvez également extraire les informations de date / heure de n'importe quel fichier avec date.exe.

Exemples: (dans un script cmd, utilisez %% 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: N'importe quel texte

date.exe +"Text: %y/%m/%d-any text-%H.%M"
Texte: 09/12/22-tout texte-18,55

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

Les informations de date / heure 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 des informations sur l'année, le mois, le jour et l'heure:

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

L'utiliser dans un script CMD pour obtenir un horodatage dans n'importe quel format requis:

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 de n'importe quel 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

Ajout à 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 fait partie des outils GNU gratuits qui ne nécessitent aucune installation.

REMARQUE: la copie date.exedans n'importe quel répertoire qui se trouve dans le chemin de recherche peut entraîner l'échec d'autres scripts utilisant la datecommande intégrée de Windows .

Uri Liebeskind
la source
4
Beaucoup mieux que la solution étrangement plus populaire ci-dessus, mais j'ai dû ajouter / t pour éviter l'invite sur Windows 8.1
rainabba
6
Windows 8.1 intégré date.exesemble dépendre des paramètres régionaux. Il renvoie la date en jj / MM / aaaa sur mon système, si elle était indépendante des paramètres régionaux, je m'attendrais à MM / jj / aaaa ou aaaa-MM-jj. Je ne pense pas que cette réponse parle du date.exe intégré mais d'une version tierce de celui-ci.
SSS
1
il est indépendant des paramètres régionaux si vous lui fournissez le format souhaité sur la ligne de commande
terrinecold
3
Veuillez noter que date.exe (qui fait partie d'UnxUtils) n'est pas la même que la commande de date intégrée. Donc, si vous devez ajouter / t, la commande windows date est exécutée. Si quelque chose comme date.exe + "% Y-% m-% d" fonctionne, vous avez correctement installé les UnxUtils. :-)
just.do.it
Est-il possible de charger des fichiers avec la date de création à l'aide de xp_cmdshell dans SQL Server? J'ai essayé la commande "forfiles" mais en vain. J'ai posé une question sur stackoverflow, veuillez consulter le lien @ stackoverflow.com/q/32293517/3327081
kolunar
105

Deux autres façons qui ne dépendent pas des paramètres d'heure (toutes deux tirées de : Comment rendre les données / l'heure indépendantes de la localisation:) . Et les deux obtiennent également le jour de la semaine et aucun d'entre eux ne nécessite des autorisations d'administrateur!:

  1. MAKECAB - fonctionnera sur CHAQUE système Windows (rapide, mais crée un petit fichier temporaire) (le script foxidrive):

    @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
    

    Plus d'informations sur la fonction get-date .

  2. ROBOCOPIE - ce n'est pas une commande native pour Windows XP et Windows Server 2003, mais elle peut être téléchargée à partir du site Microsoft . Mais il est intégré à tout depuis Windows Vista et supérieur:

    @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 autres façons d'utiliser d'autres langages de script Windows. Ils vous donneront plus de flexibilité, par exemple, vous pouvez obtenir la semaine de l'année, le temps en millisecondes, etc.

  3. Hybride JScript / batch (doit être enregistré sous .bat). JScript est disponible sur tous les systèmes NT et au-dessus, en tant que partie de Windows Script Host ( bien qu'il puisse être désactivé via le registre, c'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. Hybride VSCRIPT / BATCH ( Est-il possible d'incorporer et d'exécuter VBScript dans un fichier batch sans utiliser de 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 disposant de .NET - téléchargement depuis Microsoft ( v1 , v2 , v3 (uniquement pour Windows 7 et supérieur)). Il est installé par défaut sur tout depuis Windows 7 / Windows Server 2008 et supérieur:

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

    Pour l'utiliser à partir d'un fichier batch:

    for /f "delims=" %%# in ('powershell get-date -format "{dd-MMM-yyyy HH:mm}"') do @set _date=%%#
    
  6. Auto-compilé jscript.net/batch (jamais vu une machine Windows sans .NET, donc je pense que c'est assez portable):

    @if (@X)==(@Y) @end /****** silent line that start JScript comment ******
    
    @echo off
    ::::::::::::::::::::::::::::::::::::
    :::       Compile the script    ::::
    ::::::::::::::::::::::::::::::::::::
    setlocal
    if exist "%~n0.exe" goto :skip_compilation
    
    set "frm=%SystemRoot%\Microsoft.NET\Framework\"
    
    :: Searching the latest installed .NET framework
    for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
        if exist "%%v\jsc.exe" (
            rem :: the javascript.net compiler
            set "jsc=%%~dpsnfxv\jsc.exe"
            goto :break_loop
        )
    )
    echo jsc.exe not found && exit /b 0
    :break_loop
    
    
    call %jsc% /nologo /out:"%~n0.exe" "%~dpsfnx0"
    ::::::::::::::::::::::::::::::::::::
    :::       End of compilation    ::::
    ::::::::::::::::::::::::::::::::::::
    :skip_compilation
    
    "%~n0.exe"
    
    exit /b 0
    
    
    ****** End of JScript comment ******/
    import System;
    import System.IO;
    
    var dt=DateTime.Now;
    Console.WriteLine(dt.ToString("yyyy-MM-dd hh:mm:ss"));
    
  7. Logman Cela ne peut pas obtenir l'année et le jour de la semaine. Il est relativement lent et crée également un fichier temporaire et est basé sur les horodatages que logman place sur ses fichiers journaux. Il fonctionnera sur tout, à partir de Windows XP et supérieur. Il ne sera probablement jamais utilisé par personne - y compris moi - mais c'est une autre façon ...

    @echo off
    setlocal
    del /q /f %temp%\timestampfile_*
    
    Logman.exe stop ts-CPU 1>nul 2>&1
    Logman.exe delete ts-CPU 1>nul 2>&1
    
    Logman.exe create counter ts-CPU  -sc 2 -v mmddhhmm -max 250 -c "\Processor(_Total)\%% Processor Time" -o %temp%\timestampfile_ >nul
    Logman.exe start ts-CPU 1>nul 2>&1
    
    Logman.exe stop ts-CPU >nul 2>&1
    Logman.exe delete ts-CPU >nul 2>&1
    for /f "tokens=2 delims=_." %%t in  ('dir /b %temp%\timestampfile_*^&del /q/f %temp%\timestampfile_*') do set timestamp=%%t
    
    echo %timestamp%
    echo MM: %timestamp:~0,2%
    echo dd: %timestamp:~2,2%
    echo hh: %timestamp:~4,2%
    echo mm: %timestamp:~6,2%
    
    endlocal
    exit /b 0
    
  8. Une autre façon avec WMIC qui donne également la semaine de l'année et le jour de la semaine, mais pas les millisecondes (pour les millisecondes, vérifiez la réponse de foxidrive):

    for /f %%# in ('wMIC Path Win32_LocalTime Get /Format:value') do @for /f %%@ in ("%%#") do @set %%@
    echo %day%
    echo %DayOfWeek%
    echo %hour%
    echo %minute%
    echo %month%
    echo %quarter%
    echo %second%
    echo %weekinmonth%
    echo %year%
    
  9. Utiliser TYPEPERF avec quelques efforts pour être rapide et compatible avec différents paramètres de langue et aussi rapidement que possible:

    @echo off
    setlocal
    
    :: Check if Windows is Windows XP and use Windows XP valid counter for UDP performance
    ::if defined USERDOMAIN_roamingprofile (set "v=v4") else (set "v=")
    
    for /f "tokens=4 delims=. " %%# in ('ver') do if %%# GTR 5 (set "v=v4") else ("v=")
    set "mon="
    for /f "skip=2 delims=," %%# in ('typeperf "\UDP%v%\*" -si 0 -sc 1') do (
       if not defined mon (
          for /f "tokens=1-7 delims=.:/ " %%a in (%%#) do (
            set mon=%%a
            set date=%%b
            set year=%%c
            set hour=%%d
            set minute=%%e
            set sec=%%f
            set ms=%%g
          )
       )
    )
    echo %year%.%mon%.%date%
    echo %hour%:%minute%:%sec%.%ms%
    endlocal
    
  10. MSHTA permet d'appeler des méthodes JavaScript similaires à la méthode JScript illustrée au n ° 3 ci-dessus. Gardez à l'esprit que les propriétés d'objet Date de JavaScript impliquant des valeurs de mois sont numérotées de 0 à 11, et non de 1 à 12. Ainsi, une valeur de 9 signifie octobre.

    <!-- : Batch portion
    
    @echo off
    setlocal
    
    for /f "delims=" %%I in ('mshta "%~f0"') do set "now.%%~I"
    
    rem Display all variables beginning with "now."
    set now.
    
    goto :EOF
    
    end batch / begin HTA -->
    
    <script>
        resizeTo(0,0)
        var fso = new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1),
            now = new Date(),
            props=['getDate','getDay','getFullYear','getHours','getMilliseconds','getMinutes',
                'getMonth','getSeconds','getTime','getTimezoneOffset','getUTCDate','getUTCDay',
                'getUTCFullYear','getUTCHours','getUTCMilliseconds','getUTCMinutes','getUTCMonth',
                'getUTCSeconds','getYear','toDateString','toGMTString','toLocaleDateString',
                'toLocaleTimeString','toString','toTimeString','toUTCString','valueOf'],
            output = [];
    
        for (var i in props) {output.push(props[i] + '()=' + now[props[i]]())}
        close(fso.Write(output.join('\n')));
    </script>
    
npocmaka
la source
2
pour powershell C: \> for / f %% i in ('powershell get-date -format "{yyyyMMdd_HHmmss}"'), définissez datetime = %% i C: \> echo% datetime%
Samuel
1
makecab: cela fonctionne en créant un fichier appelé ~.rpt, et en recherchant un stringdedans, en commençant par makecab, qui est comme une ligne MakeCAB Report: Tue Sep 02 22:15:57 2014. pour moi, cette commande n'est pas localisée, elle est indépendante des paramètres régionaux. Cette astuce repose sur cela. Espérons que ce ne sera jamais le cas, sinon méfiez-vous!
n611x007
10
J'apprécie le texte d'ouverture "Deux de plus ..." suivi de 8 solutions.
Adam Smith du
1
Quoi, pas d' mshtahybride? :) Ça vous dérange si je modifie votre réponse et en ajoute une? Cela semble être la meilleure collection de solutions ésotériques, et il semble que cela mshtaappartient ici.
rojo
1
La solution acceptée ne fonctionnerait pas pour moi, quoi que j'aie essayé. Plusieurs de ces solutions ont fonctionné pour moi. (Lot et Powershell).
Brett Attendez
44

Voici une variante de alt.msdos.batch.nt qui fonctionne localement indépendamment.

Mettez-le 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 que le code fonctionne sans msg d'erreur sur stderr, j'ai dû ajouter des guillemets simples pour les affectations de variables pour %% a, %% b et %% c. Mon environnement local (PT) provoquait des erreurs à un moment de la boucle / analyse où des choses comme "set = 20" étaient exécutées. Les guillemets produisent un jeton (bien que vide) pour le côté gauche de l'instruction d'affectation.

L'inconvénient est le nom des variables locales malpropres: «aa», «mm» et «jj». Mais bon, peu importe!

vMax
la source
3
C'est parfait et c'est l'approche la plus simple et la plus élégante que j'ai vue à ce jour.
Doug
2
Voir aussi les améliorations de Jeroen , nécessaires pour ne pas tous les paramètres régionaux utilisent les chaînes dd, mmet yydans la sortie echo:^|date.
Arjan
ne fonctionne pas sur tous les paramètres régionaux. (En allemand datedonne Geben Sie das neue Datum ein: (TT-MM-JJ), où les JJcasse votre script (attend YY))
Stephan
35

J'utilise ceci (encore une fois pas indépendant de la région (UK))

set bklog=%date:~6,4%-%date:~3,2%-%date:~0,2%_%time:~0,2%%time:~3,2%
bleuâtre
la source
Voir Variables d'environnement Cmd.exe avec deux points et Tilde sur cette technique peu connue mais très efficace. (Un pointeur vers une référence faisant autorité de Microsoft serait apprécié.)
DavidRR
Voici la référence de fichiers batch de Microsoft pour Windows XP . Cette référence inclut l' utilisation des paramètres de lot . Malheureusement, aucune discussion sur la technique du «découpage».
DavidRR
Cela ne fonctionne pas vraiment pour moi. Peut-être que cela a quelque chose à voir avec les paramètres régionaux? J'obtiens une sortie de "/ 15 / - 1-We_1009" lors de son exécution le mercredi 15 octobre 2014.
Joel B
26

Les quatre premières lignes de ce code vous fourniront des variables fiables YY DD MM YYYY HH Min Sec dans Windows XP Professionnel et versions ultérieures.

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%" & set "fullstamp=%YYYY%-%MM%-%DD%_%HH%%Min%-%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"
pause
Foxidrive
la source
Parfait, c'est la meilleure solution pour moi, car appeler PS entraînera l'apparition du texte cmd pour qu'il soit drôle.
Ste
25

Malheureusement, ce n'est pas à l'abri des paramètres régionaux, mais il fait ce que vous voulez.

set hour=%time:~0,2%
if "%time:~0,1%"==" " set hour=0%time:~1,1%
set _my_datetime=%date:~10,4%-%date:~4,2%-%date:~7,2%_%hour%%time:~3,2%

Incroyable ce que vous pouvez trouver sur Wikipedia .

Mark Ransom
la source
1
Mark - Found Cmd.exe Environment Variables with Colon and Tilde qui décrit la technique de «découpage» variable présentée dans votre réponse. Ne plus trouver ces informations dans l'article Wikipedia. Voudrait trouver une référence faisant autorité de Microsoft.
DavidRR
1
Voici la référence de fichiers batch de Microsoft pour Windows XP . Cette référence inclut l' utilisation des paramètres de lot . Malheureusement, aucune discussion sur la technique du «découpage».
DavidRR
18

Veuillez utiliser le script suivant pour obtenir le jour en cours dans la ligne de commande:

echo %Date:~0,3%day
sudipto roy
la source
8
J'ai joué un peu avec ça, c'est le plus court que j'ai trouvé pour obtenir la date et l'heure: echo% date
%%
15

Une autre façon ( crédit ):

@For /F "tokens=2,3,4 delims=/ " %%A in ('Date /t') do @( 
    Set Month=%%A
    Set Day=%%B
    Set Year=%%C
)

@echo DAY = %Day%
@echo Month = %Month%
@echo Year = %Year%

Notez que mes deux réponses ici dépendent toujours de l'ordre du jour et du mois tel que déterminé par les paramètres régionaux - je ne sais pas comment contourner cela.

J c
la source
14
"d:\Program Files\7-Zip\7z.exe" a -r code_%date:~10,4%-%date:~4,2%-%date:~7,2%.zip
DigiP
la source
http://www.dotnetperls.com/7-zip-examplesa quelques bons points peut être utile pour quelqu'un à l'avenir.
Saravanan
13

Ce n'est pas vraiment plus bref mais pourrait être un moyen plus flexible ( crédit ):

FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%B
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%B
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B
FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET yyyy=%%B
SET date=%mm%%dd%%yyyy%
J c
la source
10

Voici un moyen d'obtenir l'heure de la date sur une seule ligne:

for /f "tokens=2,3,4,5,6 usebackq delims=:/ " %a in ('%date% %time%') do echo %c-%a-%b %d%e

Aux États-Unis, cela produira "aaaa-mm-jj hhmm". Différents paramètres régionaux entraîneront des sorties% date% différentes, mais vous pouvez modifier l'ordre des jetons.

Si vous souhaitez un format différent, modifiez l'instruction echo en réorganisant les jetons ou en utilisant des séparateurs différents (ou aucun).

Matthew Johnson
la source
Existe-t-il un moyen d'obtenir l'heure au format 12 heures et d'afficher également les informations AM ou PM?
Sangli
9

Utilisez simplement cette ligne:

PowerShell -Command "get-date"
gdelfino
la source
9

Réponse courte :

 :: Start - Run , type:
 cmd /c "powershell get-date -format ^"{yyyy-MM-dd HH:mm:ss}^"|clip"

 :: click into target media, Ctrl + V to paste the result 

Longue réponse

    @echo off
    :: START USAGE  ==================================================================
    ::SET THE NICETIME 
    :: SET NICETIME=BOO
    :: CALL GetNiceTime.cmd 

    :: ECHO NICETIME IS %NICETIME%

    :: echo nice time is %NICETIME%
    :: END USAGE  ==================================================================

    echo set hhmmsss
    :: this is Regional settings dependant so tweak this according your current settings
    for /f "tokens=1-3 delims=:" %%a in ('echo %time%') do set hhmmsss=%%a%%b%%c 
    ::DEBUG ECHO hhmmsss IS %hhmmsss%
    ::DEBUG PAUSE
    echo %yyyymmdd%
        :: this is Regional settings dependant so tweak this according your current settings
    for /f "tokens=1-3 delims=." %%D in ('echo %DATE%') do set  yyyymmdd=%%F%%E%%D
    ::DEBUG ECHO yyyymmdd IS %yyyymmdd%
    ::DEBUG PAUSE


    set NICETIME=%yyyymmdd%_%hhmmsss%
    ::DEBUG echo THE NICETIME IS %NICETIME%

    ::DEBUG PAUSE
Yordan Georgiev
la source
:: in cmd for / f% i in ('PowerShell -Command "get-date" -format "yyyyMMdd"') do set yyyyMMdd =% i :: in cmd script for / f %% i in ('PowerShell -Command "get-date" -format "yyyyMMdd" ') do set yyyyMMdd = %% i
Yordan Georgiev
8

La solution à une ligne de Matthew Johnson pour obtenir la date et l'heure à une ligne est éloquente et utile.

Il a cependant besoin d'une simple modification pour fonctionner à partir d'un fichier batch:

for /f "tokens=2,3,4,5,6 usebackq delims=:/ " %%a in ('%date% %time%') do echo %%c-%%a-%%b %%d%%e
John Langstaff
la source
1
Ne fonctionne pas dans CMD (%% a était inattendu pour le moment) ou dans PowerShell (Ouverture manquante '(' après le mot clé pour) sur Windows 8.1
rainabba
3
Rainabba, c'est exactement l'erreur que vous obtenez lorsque cette commande est émise à partir de la ligne CMD . Cependant, "à partir d'un fichier de commandes ", la commande renvoie "2014-01-30 1324".
John Langstaff du
1
ou beaucoup plus simple serait sans la boucle forecho %date:/=-%%time::=-%
Gerhard Barnard
7

Et voici un fichier batch similaire pour la partie temps.

:: http://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-usi
:: Works on any NT/2k machine independent of regional time settings
::
:: Gets the time in ISO 8601 24-hour format
::
:: Note that %time% gets you fractions of seconds, and time /t doesn't, but gets you AM/PM if your locale supports that.
:: Since ISO 8601 does not care about AM/PM, we use %time%
::
    @ECHO off
    SETLOCAL ENABLEEXTENSIONS
    for /f "tokens=1-4 delims=:,.-/ " %%i in ('echo %time%') do (
      set 'hh'=%%i
      set 'mm'=%%j
      set 'ss'=%%k
      set 'ff'=%%l)
    ENDLOCAL & SET v_Hour=%'hh'%& SET v_Minute=%'mm'%& SET v_Second=%'ss'%& SET v_Fraction=%'ff'%

    ECHO Now is Hour: [%V_Hour%] Minute: [%V_Minute%] Second: [%v_Second%] Fraction: [%v_Fraction%]
    set timestring=%V_Hour%%V_Minute%%v_Second%.%v_Fraction%
    echo %timestring%

    :EOF

--jeroen

Jeroen Wiert Pluimers
la source
Salut, j'ai pu charger des fichiers selon la date modifiée en utilisant une commande ci-dessous, z: & forfiles /m *.jpg /s /d 07/16/2015 /c “cmd /c echo @fdate @ftime @path” mais je veux savoir comment charger des fichiers selon la date de création. Toute aide serait très appréciée. Une question a été posée sur stackoverflow mais aucune réponse pour le moment. Veuillez consulter le lien pour les détails stackoverflow.com/q/32293517/3327081
kolunar
1
Posez une nouvelle question à ce sujet. Je ne l'ai jamais utilisé forfiles.
Jeroen Wiert Pluimers
7

J'ai changé la réponse avec le fichier batch de vMax afin qu'il fonctionne aussi avec la langue néerlandaise.
Les Pays - Bas - persistante que nous sommes - ont quelques changements dans la %date%, date/tet dateque la rupture du lot fichier d' origine.

Ce serait bien si certaines personnes pouvaient également vérifier cela par rapport à d'autres paramètres régionaux Windows et faire rapport des résultats.
Si le fichier de commandes échoue à votre emplacement, veuillez inclure la sortie de ces deux instructions à l'invite de commande:
echo:^|date
date/t

Voici un exemple de la sortie que vous devriez obtenir du fichier batch:

C:\temp>set-date-cmd.bat
Today is Year: [2011] Month: [01] Day: [03]
20110103

Voici le code révisé avec des commentaires sur pourquoi:

:: /programming/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-usi
:: Works on any NT/2k machine independent of regional date settings
::
:: 20110103 - adapted by [email protected] for Dutch locale
:: Dutch will get jj as year from echo:^|date, so the '%%c' trick does not work as it will fill 'jj', but we want 'yy'
:: luckily, all countries seem to have year at the end: http://en.wikipedia.org/wiki/Calendar_date
::            set '%%c'=%%k
::            set 'yy'=%%k
::
:: In addition, date will display the current date before the input prompt using dashes
:: in Dutch, but using slashes in English, so there will be two occurances of the outer loop in Dutch
:: and one occurence in English.
:: This skips the first iteration:
::        if "%%a" GEQ "A"
::
:: echo:^|date
:: Huidige datum: ma 03-01-2011
:: Voer de nieuwe datum in: (dd-mm-jj)
:: The current date is: Mon 01/03/2011
:: Enter the new date: (mm-dd-yy)
::
:: date/t
:: ma 03-01-2011
:: Mon 01/03/2011
::
:: The assumption in this batch-file is that echo:^|date will return the date format
:: using either mm and dd or dd and mm in the first two valid tokens on the second line, and the year as the last token.
::
:: The outer loop will get the right tokens, the inner loop assigns the variables depending on the tokens.
:: That will resolve the order of the tokens.
::
@ECHO off
    set v_day=
    set v_month=
    set v_year=

    SETLOCAL ENABLEEXTENSIONS
    if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4)
::DEBUG echo toks=%toks%
      for /f "tokens=2-4 delims=(-)" %%a in ('echo:^|date') do (
::DEBUG echo first token=%%a
        if "%%a" GEQ "A" (
          for /f "tokens=%toks% delims=.-/ " %%i in ('date/t') do (
            set '%%a'=%%i
            set '%%b'=%%j
            set 'yy'=%%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%]
    set datestring=%V_Year%%V_Month%%V_Day%
    echo %datestring%

    :EOF

--jeroen

Jeroen Wiert Pluimers
la source
2
Certains utilisent des années d'abord, ou manquent de zéros non significatifs; voir le format de date de Wikipedia par pays . Les Français pourraient utiliser jj-mm-aaaapour jour, mois, annee? Italiens peut-être gg/mm/aaaapour giorno, mese, anno? Allemands tt.mm.jjjjpour Tag, Monat, Jahr? Mais ensuite: je suppose que dans la plupart des pays, seules quelques langues sont utilisées. Comme aux Pays-Bas, Windows sera souvent en anglais ou en néerlandais, pas grand-chose d'autre. Suffisant pour moi.
Arjan
2
En passant: une autre version dans les fonctionnalités cachées des fichiers batch de Windows est moins parfaite (a besoin du correctif pour le néerlandais jj, et n'impose pas une année à 4 chiffres), mais utilise shiftpour ignorer le jour comme Monou ma. Juste différent.
Arjan
4
Il rompt sur un système allemand. L'année et le mois fonctionnent, mais le jour échoue car le "jour" commence par un "T" en allemand ("Tag"), pas un "d". La chaîne de format dans l'invite est (TT-MM-JJ), la date/tsortie est 23.06.2012. / cc @Arjan
balpha
2
Un autre côté: on pourrait également obtenir la commande du registre , en utilisant reg query "HKCU\Control Panel\International" /vShortDate. Méfiez-vous pendant les tests: pour une invite de commande ouverte, la modification de ce paramètre du Panneau de configuration modifie également le format utilisé pour afficher la date (pour les deux dateet date /tet echo %date%), mais sous Windows 7 ne modifie PAS le format de la nouvelle date! Comme changer mon court format de date en YY/MM/dd, me reçoit: The current date is: 12/06/23 Enter the new date: (mm-dd-yy). L'ouverture d'une nouvelle invite de commande corrige cela.
Arjan
2
@Arjan cela devrait être reg query "HKCU\Control Panel\International" /v sShortDate.
tricasse
6

Voici ce que j'ai utilisé:

::Date Variables - replace characters that are not legal as part of filesystem file names (to produce name like "backup_04.15.08.7z")
SET DT=%date%
SET DT=%DT:/=.%
SET DT=%DT:-=.%

Si vous souhaitez d'autres idées pour automatiser les sauvegardes dans les archives 7-Zip, j'ai un projet gratuit / ouvert que vous pouvez utiliser ou consulter pour des idées: http://wittman.org/ziparcy/

micahwittman
la source
Sur mon système,% date% contient "Tue 14/10/2008". Donc, vous devrez toujours couper (ou traiter autrement) le "Mar" et le caractère espace.
BoltBait
Salut @micahwittman. Est-il possible de charger des fichiers avec la date de création à l'aide de xp_cmdshell dans SQL Server? J'ai essayé la commande "forfiles" mais en vain. J'ai posé une question sur stackoverflow, veuillez consulter le lien @ stackoverflow.com/q/32293517/3327081
kolunar
5

J'avais un problème similaire. J'ai un téléchargement quotidien automatique à partir d'un serveur FTP d'un fichier crypté. Je voulais décrypter le fichier en utilisant gpg, renommer le fichier à la date actuelle (format YYYYMMDD) et déposer le fichier décrypté dans un dossier pour le bon département.

J'ai parcouru plusieurs suggestions pour renommer le fichier en fonction de la date et je n'ai pas eu de chance jusqu'à ce que je tombe sur cette solution simple.

for /f "tokens=1-5 delims=/ " %%d in ("%date%") do rename "decrypted.txt" %%g-%%e-%%f.txt

Cela a parfaitement fonctionné (c'est-à-dire que le nom du fichier est "2011-06-14.txt").

(La source)

KChiki
la source
5

Une fonction basée sur wmic:

:Now  -- Gets the current date and time into separate variables
::    %~1: [out] Year
::    %~2: [out] Month
::    %~3: [out] Day
::    %~4: [out] Hour
::    %~5: [out] Minute
::    %~6: [out] Second
  setlocal
  for /f %%t in ('wmic os get LocalDateTime ^| findstr /b [0-9]') do set T=%%t
  endlocal & (
    if "%~1" neq "" set %~1=%T:~0,4%
    if "%~2" neq "" set %~2=%T:~4,2%
    if "%~3" neq "" set %~3=%T:~6,2%
    if "%~4" neq "" set %~4=%T:~8,2%
    if "%~5" neq "" set %~5=%T:~10,2%
    if "%~6" neq "" set %~6=%T:~12,2%
  )
goto:eof

Côté supérieur: indépendant de la région. Inconvénient: seuls les administrateurs système peuvent exécuter wmic.exe.

Usage:

call:Now Y M D H N S
echo %Y%-%M%-%D% %H%:%N%:%S%

Cela fait écho à une chaîne comme celle-ci:

2014-01-22 12:51:53

Notez que les paramètres de fonction sont out-Parameters - c'est-à-dire que vous devez fournir des noms de variables au lieu de valeurs.

Tous les paramètres sont facultatifs, tout call:Now Y Mcomme un appel valide si vous souhaitez uniquement obtenir l'année et le mois.

Tomalak
la source
4

http://sourceforge.net/projects/unxutils/files/

Recherchez à l'intérieur du fichier ZIP quelque chose appelé "Date.exe" et renommez-le "DateFormat.exe" (pour éviter les conflits).

Mettez-le dans votre dossier Windows system32.

Il a beaucoup d'options de "sortie de date".

Pour obtenir de l'aide, utilisez DateFormat.exe --h

Je ne sais pas comment vous mettriez sa sortie dans une variable d'environnement ... en utilisant SET.

Sortie
la source
1
Merci, bien que cette question soit spécifiquement pour le faire sans télécharger des outils supplémentaires.
Rory
3

Solution indépendante régionale générant le format de date ISO:

rem save the existing format definition
for /f "skip=2 tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v sShortDate') do set FORMAT=%%a
rem set ISO specific format definition
reg add "HKCU\Control Panel\International" /v sShortDate /t REG_SZ /f /d yyyy-MM-dd 1>nul:
rem query the date in the ISO specific format 
set ISODATE=%DATE%
rem restore previous format definition
reg add "HKCU\Control Panel\International" /v sShortDate /t REG_SZ /f /d %FORMAT% 1>nul:

Ce qui pourrait encore être optimisé: D'autres processus peuvent devenir confus si vous utilisez le format de date dans la courte période pendant qu'il est modifié. Ainsi, l'analyse de la sortie en fonction de la chaîne de format existante pourrait être «plus sûre» - mais sera plus compliquée

V15I0N
la source
vous pouvez reg interroger iDate ( technet.microsoft.com/en-us/library/cc978637.aspx ) et procéder de manière conditionnelle (3 valeurs possibles selon technet) - bien que je n'aie pas encore essayé.
Vincent De Smet
2
:: GetDate.cmd -> Uses WMIC.exe to get current date and time in ISO 8601 format
:: - Sets environment variables %_isotime% and %_now% to current time
:: - On failure, clears these environment variables
:: Inspired on -> https://ss64.com/nt/syntax-getdate.html
:: - (cX) 2017 [email protected]
:: - http://stackoverflow.com/questions/203090
@echo off

set _isotime=
set _now=

:: Check that WMIC.exe is available
WMIC.exe Alias /? >NUL 2>&1 || goto _WMIC_MISSING_

if not (%1)==() goto _help
SetLocal EnableDelayedExpansion

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

::   1    2     3       4      5      6
:: %%G  %%H    %%I     %%J    %%K    %%L
:: Day  Hour  Minute  Month  Second  Year
:: 27   9     35      4      38      2017

:: Remove excess leading zeroes
        set _mm=%_mm:~-2%
        set _dd=%_dd:~-2%
        set _hour=%_hour:~-2%
        set _minute=%_minute:~-2%
        set _second=%_second:~-2%
:: Syntax -> %variable:~num_chars_to_skip,num_chars_to_keep%

:: Set date/time in ISO 8601 format:
        Set _isotime=%_yyyy%-%_mm%-%_dd%T%_hour%:%_minute%:%_second%
:: -> http://google.com/search?num=100&q=ISO+8601+format

if 1%_hour% LSS 112 set _now=%_isotime:~0,10% %_hour%:%_minute%:%_second%am
if 1%_hour% LSS 112 goto _skip_12_
    set /a _hour=1%_hour%-12
    set _hour=%_hour:~-2%
    set _now=%_isotime:~0,10% %_hour%:%_minute%:%_second%pm
    :: -> https://ss64.com/nt/if.html
    :: -> http://google.com/search?num=100&q=SetLocal+EndLocal+Windows
    :: 'if () else ()' will NOT set %_now% correctly !?
:_skip_12_

EndLocal & set _isotime=%_isotime% & set _now=%_now%
goto _out

:_WMIC_MISSING_
echo.
echo WMIC.exe command not available
echo - WMIC.exe needs Administrator privileges to run in Windows
echo - Usually the path to WMIC.exe is "%windir%\System32\wbem\WMIC.exe"

:_help
echo.
echo GetDate.cmd: Uses WMIC.exe to get current date and time in ISO 8601 format
echo.
echo    %%_now%%     environment variable set to current date and time
echo    %%_isotime%% environment variable to current time in ISO format
echo    set _today=%%_isotime:~0,10%%
echo.

:_out
:: EOF: GetDate.cmd
Adolfo
la source
0

Étant donné une localité connue, pour référence sous forme fonctionnelle. L' ECHOTIMESTAMPappel montre comment obtenir l'horodatage dans une variable ( DTSdans cet exemple.)

@ECHO off

CALL :ECHOTIMESTAMP
GOTO END

:TIMESTAMP
SETLOCAL  EnableDelayedExpansion
    SET DATESTAMP=!DATE:~10,4!-!DATE:~4,2!-!DATE:~7,2!
    SET TIMESTAMP=!TIME:~0,2!-!TIME:~3,2!-!TIME:~6,2!
    SET DTS=!DATESTAMP: =0!-!TIMESTAMP: =0!
ENDLOCAL & SET "%~1=%DTS%"
GOTO :EOF

:ECHOTIMESTAMP
SETLOCAL
    CALL :TIMESTAMP DTS
    ECHO %DTS%
ENDLOCAL
GOTO :EOF

:END

EXIT /b 0

Et enregistré dans un fichier, timestamp.bat, voici la sortie:

entrez la description de l'image ici

bvj
la source
Il semble que cela vient avec le problème régional - cela ne fonctionne pas sur toutes les machines anglaises.
Pas surpris, @SteveFest. S'il était possible de définir temporairement les paramètres régionaux, cela pourrait aider à fournir une solution globale, mais il semble qu'il soit nécessaire de connaître la région à l'avance. Votre locale est-elle en-US ou en-SomewhereElse?
bvj
@SteveFest Je suppose qu'il serait possible de construire une liste de paramètres régionaux où chacun inclut des expressions de date / heure avec un échantillon à valider. Je suis très occupé, mais je vais essayer de mettre à jour ma réponse pour illustrer. Pourriez-vous me montrer des échantillons des sorties heure / date HK? Je peux être en train de supposer bêtement que zh-HK imprime des chiffres à des décalages fixes.
bvj
zh-HK: (yy)yy年m月d日 hh:mm- pas de zéros non significatifs. (aa) pourrait être ignoré car nous avons une année à 2 chiffres ou une année à 4 chiffres. Mais veuillez noter une chose: le format de la date et de l'heure peut être modifié par machine.
Merci @SteveFest, je suivrai dans quelques semaines. Exécutez systeminfol'interface CLI et faites-moi savoir ce que vous voyez System Locale. Le programme prend du temps à s'exécuter, mais le résultat des paramètres régionaux pourrait peut-être être mis en cache et ensuite utilisé pour indexer un format d'horodatage.
bvj
0

Avec Windows 7, ce code fonctionne pour moi:

SET DATE=%date%
SET YEAR=%DATE:~0,4%
SET MONTH=%DATE:~5,2%
SET DAY=%DATE:~8,2%
ECHO %YEAR%
ECHO %MONTH%
ECHO %DAY%

SET DATE_FRM=%YEAR%-%MONTH%-%DAY% 
ECHO %DATE_FRM%
Frizz1977
la source
Et encore. C'est bien que cela fonctionne sur votre machine, mais vous avez raté le pointindependent of the regional settings of the machine
jeb
-1

Je note que l'o / p n'a pas demandé de solution indépendante de la région. Ma solution est cependant pour le Royaume-Uni.

Il s'agit de la solution la plus simple possible, une solution à 1 ligne, à utiliser dans un fichier batch:

FOR /F "tokens=1-3 delims=/" %%A IN ("%date%") DO (SET today=%%C-%%B-%%A)
echo %today%
Ed999
la source
2
Il a mentionné une solution indépendante de la région ...particularly because of the regional settings issue with using date. Btw. Votre solution est la même que les vingt autres réponses.
jeb
Oui, mais le mien pourrait en fait (en option) être utilisé sur la ligne de commande. Quel est l'intérêt de publier 35 lignes de code, si une ligne de code fournit la même solution?
Ed999
Je ne vois aucune différence pertinente par rapport aux anciennes réponses de @Matthew Johnson, 2010 ou @KChiki, 2011
jeb
même si cette réponse est incorrecte, pour commenter la réponse réelle, une boucle for n'est pas nécessaire ici alors que vous auriez pu simplement le faireecho %date:/=-%
Gerhard Barnard
Non. Si vous omettez la boucle FOR, aucune variable ne peut être créée et la date que vous avez pris la peine d'extraire est toujours inutile. Avec la boucle FOR, les variables créées par la boucle sont disponibles pour être utilisées dans d'autres parties du script. Je déconseille fortement d'utiliser des dizaines de lignes de code pour créer la boucle FOR, lorsqu'une seule ligne est requise. Et je déconseille fortement la publication de solutions hors ligne de commande, où le responsable a spécifiquement demandé une solution à une ligne à utiliser sur la ligne de commande.
Ed999
-3

Je sais qu'il existe déjà de nombreuses façons. Mais voici ma façon de le décomposer pour comprendre comment cela se fait. J'espère que cela sera utile pour quelqu'un qui aime la méthode étape par étape.

:: Check your local date format
echo %date%

    :: Output is Mon 08/15/2016

:: get day (start index, number of characters)
::         (index starts with zero)
set myday=%DATE:~0,4%
echo %myday%
    :: output is Mon 

:: get month
set mymonth=%DATE:~4,2%
echo %mymonth%
    :: output is 08

:: get date 
set mydate=%DATE:~7,2% 
echo %mydate%
    :: output is 15

:: get year
set myyear=%DATE:~10,4%
echo %myyear%
    :: output is 2016
Gifcrazy
la source
3
Vous avez raté le pointindependent of the regional settings of the machine
jeb