Obtener fecha y hora

Mantenido el

Al crear archivos de registro en un archivo por lotes o al añadir la fecha a una carpeta de copia de seguridad, resulta muy útil saber cómo obtener la fecha y la hora actuales.

Este artículo explica cómo usar %DATE% y %TIME% y cómo aplicarlos a los nombres de archivo.

Para obtener una cadena como 20261010_143045 sin depender de la configuración regional, el método más fiable es llamar a PowerShell:

for /f %%I in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set STAMP=%%I

Cortar %DATE% es rápido, pero los ejemplos siguientes suponen la configuración regional japonesa predeterminada (YYYY/MM/DD). Ajusta las posiciones si tu formato es distinto.

Obtener la fecha (%DATE%)

La variable de entorno %DATE% devuelve la fecha actual.

echo %DATE%
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %DATE%
2026/03/11
C:\users\user>
Sobre el formato de %DATE%

El formato de salida de %DATE% depende de la configuración regional de Windows. En un sistema japonés suele ser YYYY/MM/DD, pero en algunos entornos incluye el día de la semana (por ejemplo, mié 11/03/2026 en es-ES).

Obtener la hora (%TIME%)

La variable de entorno %TIME% devuelve la hora actual.

echo %TIME%
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %TIME%
14:30:45.23
C:\users\user>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

El formato de %TIME%

%TIME% se muestra como HH:MM:SS.mm. En las horas de la mañana puede aparecer un espacio al principio (por ejemplo, 9:05:30.12).

Crear una cadena válida para nombres de archivo a partir de la fecha

Los nombres de archivo no pueden contener la barra / ni los dos puntos :, por lo que hay que eliminar estos caracteres de la fecha y la hora.

Dar a la fecha el formato YYYYMMDD

@echo off
setlocal

rem Cuando %DATE% tiene el formato YYYY/MM/DD
set YYYY=%DATE:~0,4%
set MM=%DATE:~5,2%
set DD=%DATE:~8,2%
set TODAY=%YYYY%%MM%%DD%

echo Fecha de hoy: %TODAY%

endlocal
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>dateformat.cmd
Fecha de hoy: 20260311
C:\users\user>

Dar a la hora el formato HHMMSS

@echo off
setlocal

rem Reemplaza el espacio inicial de la hora por 0
set HOUR=%TIME:~0,2%
set HOUR=%HOUR: =0%
set MIN=%TIME:~3,2%
set SEC=%TIME:~6,2%
set NOW=%HOUR%%MIN%%SEC%

echo Hora actual: %NOW%

endlocal
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>timeformat.cmd
Hora actual: 143045
C:\users\user>
チェック

Cuando la hora de %TIME% tiene un solo dígito (por ejemplo, las 9 de la mañana), se incluye un espacio al principio. Reemplazar el espacio por 0 con set HOUR=%HOUR: =0% garantiza que siempre tenga dos dígitos.

Usar la fecha y la hora en nombres de archivo

Copia de seguridad con marca de tiempo

@echo off
setlocal

set YYYY=%DATE:~0,4%
set MM=%DATE:~5,2%
set DD=%DATE:~8,2%
set TIMESTAMP=%YYYY%%MM%%DD%

set BACKUP_DIR=D:\Backup\%TIMESTAMP%

mkdir "%BACKUP_DIR%" 2>nul
xcopy "C:\Users\user\Documents\*.*" "%BACKUP_DIR%\" /E /Y >nul

echo Destino de la copia: %BACKUP_DIR%
echo La copia de seguridad ha finalizado.

endlocal
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>backup_with_date.cmd
Destino de la copia: D:\Backup\20260311
La copia de seguridad ha finalizado.
C:\users\user>

Archivo de registro con marca de tiempo

@echo off
setlocal

set YYYY=%DATE:~0,4%
set MM=%DATE:~5,2%
set DD=%DATE:~8,2%
set LOGFILE=C:\Logs\process_%YYYY%%MM%%DD%.log

echo %DATE% %TIME% - Se inició el proceso. >> "%LOGFILE%"

rem Procesamiento...
echo %DATE% %TIME% - Se copiaron los archivos. >> "%LOGFILE%"

echo %DATE% %TIME% - El proceso ha finalizado. >> "%LOGFILE%"

echo Archivo de registro: %LOGFILE%
endlocal

Obtener la fecha sin depender de la configuración regional

Como %DATE% depende de la configuración regional, para los archivos por lotes que distribuyes a otros PC es más seguro usar otro método.

Con PowerShell (recomendado)

Get-Date -Format permite indicar el formato directamente, por lo que no hace falta cortar cadenas.

@echo off
setlocal

for /f %%I in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set STAMP=%%I

echo Para nombres de archivo: %STAMP%

endlocal
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>psdate.cmd
Para nombres de archivo: 20261010_143045
C:\users\user>

Iniciar PowerShell tarda aproximadamente medio segundo, así que evita llamarlo muchas veces dentro de un bucle. Obtén el valor una vez al principio y reutilízalo.

Con wmic (entornos antiguos)

@echo off
setlocal

for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set DATETIME=%%I

set YYYY=%DATETIME:~0,4%
set MM=%DATETIME:~4,2%
set DD=%DATETIME:~6,2%
set HH=%DATETIME:~8,2%
set MIN=%DATETIME:~10,2%
set SS=%DATETIME:~12,2%

echo Para nombres de archivo: %YYYY%%MM%%DD%_%HH%%MIN%%SS%

endlocal
wmic puede no estar disponible en las versiones recientes de Windows

El comando wmic está en desuso y, a partir de Windows 11 24H2, viene deshabilitado de forma predeterminada (como característica opcional) y está previsto eliminarlo. Para los archivos por lotes nuevos, elige el método con PowerShell.

Ejemplo práctico: eliminar automáticamente archivos antiguos

Este es un archivo por lotes que elimina las copias de seguridad con más de 30 días.

@echo off
setlocal

set BACKUP_DIR=D:\Backup\Logs
set DAYS=30

echo Se eliminarán los archivos con más de %DAYS% días.

forfiles /P "%BACKUP_DIR%" /S /M *.log /D -%DAYS% /C "cmd /c echo Eliminando: @path && del @path" 2>nul

echo La limpieza ha finalizado.
endlocal
チェック

El comando forfiles selecciona y procesa archivos según su fecha de modificación. /D -30 selecciona los archivos modificados por última vez hace 30 días o más, y /S incluye las subcarpetas. En las tareas de eliminación, sustituye primero del @path por echo @path para comprobar los archivos afectados antes de ejecutarlo de verdad.

Resumen

OperaciónMétodo
Obtener la fecha%DATE%
Obtener la hora%TIME%
Formato YYYYMMDD%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
Fecha independiente de la regiónpowershell -Command "Get-Date -Format yyyyMMdd"

Artículos relacionados

Preguntas de práctica

Problema de práctica

¿Qué afirmación sobre la variable de entorno %DATE% es correcta?

回答がサーバーに送信されることはありません
#Símbolo del sistema #Archivo por lotes #Fecha #Hora #Registro