¿Cómo guardo la fecha actual en formato AAAA-MM-DD en alguna variable en un archivo .bat de Windows?
Análogo de shell de Unix:
today=`date +%F`
echo $today
windows
batch-file
Maksym Polshcha
fuente
fuente
Respuestas:
Puede obtener la fecha actual de forma independiente de la configuración regional utilizando
Luego, puede extraer las partes individuales usando subcadenas:
Otra forma, donde obtienes variables que contienen las partes individuales, sería:
Mucho mejor que jugar con subcadenas, a expensas de contaminar el espacio de nombres de las variables.
Si necesita UTC en lugar de la hora local, el comando es más o menos el mismo:
fuente
for /f
devuelve dos líneas, la última de las cuales está vacía. Puedes resolver eso usandoset MyDate=
en el medio. Supongo que con eso se tropezó el usuario2023861.Year
,Month
,Day
,Hour
,Minute
,Second
,Quarter
,WeekInMonth
,DayOfWeek
for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do set %%x set today=%Year%-%Month%-%Day%
es una respuesta inválida: devuelve un dígito de mes y día. ¿Cómo se rellena la izquierda de 2 dígitos con mes cero y cadena del día hasta la fecha?Si desea lograr esto usando comandos estándar de MS-DOS en un archivo por lotes, puede usar:
Estoy seguro de que esto se puede mejorar aún más, pero esto da la fecha en 3 variables para Día (dd), Mes (mm) y Año (aaaa). Luego, puede usarlos más adelante en su secuencia de comandos por lotes según sea necesario.
Si bien entiendo que se ha aceptado una respuesta para esta pregunta, este método alternativo puede ser apreciado por muchos que buscan lograrlo sin usar la consola WMI, así que espero que agregue algo de valor a esta pregunta.
fuente
Úselo
date /T
para buscar el formato en el símbolo del sistema.Si el formato de fecha es
Thu 17/03/2016
usa así:fuente
SELECT CONVERT(VARCHAR(16), GETDATE(), 112)
".%date:~10,4%%date:~7,2%%date:~4,2%T%time:~0,2%%time:~3,2%%time:~6,2%
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 !:
MAKECAB : funcionará en TODOS los sistemas Windows (rápido, pero crea un pequeño archivo temporal) (el script foxidrive):
ROBOCOPY : no es un comando nativo para Windows XP y Windows Server 2003 , pero se puede descargar del sitio de Microsoft . Pero está integrado en todo, desde Windows Vista y versiones posteriores:
Y tres formas más que utilizan otros lenguajes de script de Windows. Le darán más flexibilidad, por ejemplo, puede obtener la semana del año, la hora en milisegundos, etc.
Híbrido JScript / BATCH (debe guardarse como
.bat
). JScript está disponible en todos los sistemas de Windows NT y superior, como parte de Windows Script Host ( aunque se puede desactivar a través del registro, es un caso raro ):VBScript / BATCH híbrido ( ¿Es posible incrustar y ejecutar VBScript dentro de un archivo por lotes sin usar un archivo temporal? ) En el mismo caso que jscript, pero la hibridación no es tan perfecta:
PowerShell : se puede instalar en todas las máquinas que tengan .NET; descargar de Microsoft ( v1 , v2 y v3 (solo para Windows 7 y superior)). Instalado por defecto en todo desde Windows 7 / Win2008 y superior:
Jscript.net/batch autocompilado (nunca he visto una máquina con Windows sin .NET, así que creo que es bastante portátil):
Logman Esto no puede obtener el año y el día de la semana. Es comparativamente lento, también crea un archivo temporal y se basa en las marcas de tiempo que logman coloca en sus archivos de registro. Funcionará todo desde Windows XP y superior. Probablemente nadie lo use nunca, incluido yo, pero es una forma más ...
Más información sobre la función Get-Date .
fuente
Me gustó mucho el método de Joey, pero pensé en ampliarlo un poco.
En este enfoque, puede ejecutar el código varias veces y no preocuparse por que el valor de fecha anterior "se quede" porque ya está definido.
Cada vez que ejecute este archivo por lotes, generará una representación combinada de fecha y hora compatible con ISO 8601.
En esta versión, deberá tener cuidado de no copiar / pegar el mismo código en varios lugares del archivo porque eso causaría etiquetas duplicadas. Puede tener una etiqueta separada para cada copia o simplemente poner este código en su propio archivo por lotes y llamarlo desde su archivo fuente cuando sea necesario.
fuente
Solo usa la
%date%
variable:fuente
Según la respuesta de @ProVi, simplemente cambie para adaptarse al formato que necesita
volverá
EDITAR Según el comentario de @Jeb, quién tiene razón, el formato de hora anterior solo funcionará si su comando DATE / T regresa
Sin embargo, es fácil de editar para que se adapte a su configuración regional, al usar la indexación de cada carácter en la cadena devuelta por la variable de entorno% DATE% relevante, puede extraer las partes de la cadena que necesita.
p.ej. El uso de% DATE ~ 10,4% expandiría la variable de entorno DATE y luego usaría solo los 4 caracteres que comienzan en el undécimo carácter (desplazamiento 10) del resultado expandido
Por ejemplo, si usa fechas con estilo de EE. UU., Se aplica lo siguiente
fuente
Establecí una variable de entorno en el valor en el formato numérico deseado haciendo esto:
fuente
Revisa este..
fuente
Si tiene Python instalado, puede hacer
Puede adaptar fácilmente la cadena de formato a sus necesidades.
fuente
python -c "import datetime;print(datetime.date.today())"
, porque el__str__
método de ladate
clase solo llamaisoformat()
.Es posible usar PowerShell y redirigir su salida a una variable de entorno mediante un bucle.
Desde la línea de comando (
cmd
):En un archivo por lotes, puede escapar
%a
como%%a
:fuente
FOR /F "tokens=*" %%a IN ('powershell get-date -format "{yyyy\-MM\-dd\THH\:mm\:ss}"') DO SET date=%%a
así que use MM superior para el mes y barra invertida para escapar de los caracteres literales.Debido a que el formato de fecha y hora es información específica de la ubicación, recuperarlos de las variables% date% y% time% requerirá un esfuerzo adicional para analizar la cadena con la transformación de formato en consideración. Una buena idea es utilizar alguna API para recuperar la estructura de datos y analizarla como desee. WMIC es una buena opción. El siguiente ejemplo usa Win32_LocalTime . También puede utilizar Win32_CurrentTime o Win32_UTCTime .
Resultado:
2018-04-25_10: 03: 11
fuente
Esta es una extensión de la respuesta de Joey para incluir el tiempo y rellenar las partes con ceros.
Por ejemplo, el resultado será 2019-06-01_17-25-36. También tenga en cuenta que esta es la hora UTC.
fuente
fuente
Estoy usando lo siguiente:
O en combinación con un nombre de archivo de registro 'MyLogFileName':
fuente
Si powershell está disponible, puede usar los siguientes códigos:
Aquí está el resultado:
fuente
Si no le importa una inversión única de 10 a 30 minutos para obtener una solución confiable (que no depende de la configuración regional de Windows), siga leyendo.
Liberemos nuestras mentes. ¿Quiere simplificar los scripts para que se vean así? (Suponga que desea establecer la variable LOG_DATETIME)
Usted puede. Simplemente cree un FormatNow.exe con C # .NET y agréguelo a su PATH.
Notas:
Beneficios:
Código fuente de FormatNow.exe que creé con Visual Studio 2010 (prefiero compilarlo yo mismo para evitar el riesgo de descargar un programa desconocido, posiblemente malicioso). Simplemente copie y pegue los códigos a continuación, compile el programa una vez y luego tendrá un formateador de fecha confiable para todos los usos futuros.
En general, cuando se trata de lógicas complicadas, podemos simplificarlo construyendo un programa muy pequeño y llamando al programa para que capture la salida de nuevo en una variable de script por lotes. No somos estudiantes y no estamos tomando exámenes que requieran que sigamos la regla de solo guiones por lotes para resolver problemas. En un entorno de trabajo real, se permite cualquier método (legal). ¿Por qué deberíamos ceñirnos a las pobres capacidades del script por lotes de Windows que necesita soluciones para muchas tareas simples? ¿Por qué deberíamos utilizar la herramienta incorrecta para el trabajo?
fuente