Saltar al contenido

¿Cómo obtengo la fecha / hora actual en la línea de comandos de Windows en un formato adecuado para su uso en un nombre de archivo / carpeta?

Posterior a de una prolongada compilación de información pudimos resolver esta dificultad que suelen tener muchos los usuarios. Te ofrecemos la respuesta y nuestro objetivo es que resulte de mucha ayuda.

Solución:

Ver Archivo por lotes de Windows (.bat) para obtener la fecha actual en formato 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 prefiere la hora en formato militar / de 24 horas, puede reemplazar la segunda línea FOR con esto:

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

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

Si desea la fecha independientemente del orden de día / mes de la región, puede usar “WMIC os GET LocalDateTime” como fuente, ya que está en orden 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:> prueba.cmd
La fecha local es [2012-06-19 10:23:47.048]

Análisis de fecha y hora regionalmente independiente

El formato de salida de %DATE% y de la dir El comando depende de la región y, por lo tanto, no es robusto ni inteligente. date.exe (parte de UnxUtils) entrega cualquier información de fecha y hora en cualquier formato imaginable. También puede extraer la información de fecha / hora de cualquier archivo con date.exe.

Ejemplos: (en un script cmd use %% en lugar 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: Cualquier texto

date.exe +"Text: %y/%m/%d-any text-%H.%M"

Texto: 09/12/22-cualquier texto-18.55

Command: date.exe +"%m-%d """%H %M %S """"

07-22 “18:55:03” `

La información de fecha / hora de un archivo de referencia:
date.exe -r c:file.txt +"The timestamp of file.txt is: %Y-%m-%d %H:%M:%S"

Utilizándolo en un script CMD para obtener información sobre el año, mes, día y hora:

for /f "tokens=1,2,3,4,5,6* delims=," %%i in ('C:Toolsetcdate.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

Usándolo en un script CMD para obtener una marca de tiempo en cualquier formato requerido:

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

Extraer la información de fecha / hora de cualquier archivo de referencia.

for /f "tokens=1,2,3,4,5,6* delims=," %%i in ('C:Toolsetcdate.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

Agregar a un archivo su información de fecha / hora:

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

date.exe es parte de las herramientas GNU gratuitas que no necesitan instalación.

NOTA: Copiar date.exe en cualquier directorio que esté en la ruta de búsqueda puede hacer que fallen otros scripts que usan el sistema integrado de Windows date mando.

Dos formas más que no dependen de la configuración de la hora (ambas tomadas de: Cómo obtener datos / hora independientemente de la localización :). ¡Y ambos también obtienen el día de la semana y ninguno de ellos requiere permisos de administrador !:

  1. MAKECAB – funcionará en CADA sistema de Windows (rápido, pero crea un pequeño archivo temporal) (el 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
    

    Más información sobre la función get-date.

  2. ROBOCOPIA - no es un comando nativo para Windows XP y Windows Server 2003, pero se puede descargar desde el sitio de Microsoft. Pero está integrado en todo, desde Windows Vista y versiones posteriores:

    @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
    

    Y tres formas más que utilizan otros lenguajes de secuencia de comandos de Windows. Le darán más flexibilidad, por ejemplo, puede obtener la semana del año, la hora en milisegundos, etc.

  3. JScript / lote híbrido (debe guardarse como .bat). JScript está disponible en todos los sistemas NT y superiores, como parte de Windows Script Host (aunque se puede desactivar a través del registro, es un caso raro):

    @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 / LOTE híbrido¿Es posible incrustar y ejecutar VBScript dentro de un archivo por lotes sin usar un archivo temporal?) mismo caso que JScript, pero la hibridación no es tan perfecta:

    :sub echo(str) :end sub
    echo off
    '>nul 2>&1|| copy /Y %windir%System32doskey.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. Potencia Shell - se puede instalar en todas las máquinas que tengan .NET - descargar desde Microsoft (v1, v2, v3 (solo para Windows 7 y superior)). Se instala de forma predeterminada en todo, desde Windows 7 / Windows Server 2008 y superior:

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

    Para usarlo desde un archivo por lotes:

    for /f "delims=" %%# in ('powershell get-date -format "dd-MMM-yyyy HH:mm"') do @set _date=%%#
    
  6. Jscript.net/batch autocompilado (nunca he visto una máquina con Windows sin .NET, así que creo que esta es una bastante portátil):

    @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.NETFramework"
    
    :: Searching the latest installed .NET framework
    for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%Microsoft.NETFrameworkv*"') do (
        if exist "%%vjsc.exe" (
            rem :: the javascript.net compiler
            set "jsc=%%~dpsnfxvjsc.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 Esto no puede obtener el año y el día de la semana. Es comparativamente lento y también crea un archivo temporal y se basa en las marcas de tiempo que logman coloca en sus archivos de registro. Funcionará en todo, desde Windows XP y superior. Probablemente nadie lo use nunca, incluido yo, pero es una forma más ...

    @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. Una forma más con WMIC que también da la semana del año y el día de la semana, pero no los milisegundos (para milisegundos, verifique la respuesta 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. Utilizando TYPEPERF con algunos esfuerzos para ser rápido y compatible con diferentes configuraciones de idioma y lo más rápido posible:

    @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 permite llamar a métodos JavaScript similares al método JScript demostrado en el # 3 anterior. Tenga en cuenta que las propiedades del objeto Date de JavaScript que involucran valores de mes están numeradas del 0 al 11, no del 1 al 12. Por lo tanto, un valor de 9 significa octubre.

    
    
    
    

Aquí tienes las comentarios y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *