Actualización: ahora que es 2016, usaría PowerShell para esto a menos que haya una razón realmente convincente compatible con versiones anteriores, particularmente debido al problema de configuración regional con el uso date
. Ver https://stackoverflow.com/a/19799236/8479 de @ npocmaka
¿Qué es una (s) declaración (s) de línea de comando de Windows que puedo usar para obtener la fecha y hora actual en un formato que puedo poner en un nombre de archivo?
Quiero tener un archivo .bat que comprima un directorio en un archivo con la fecha y hora actuales como parte del nombre, por ejemplo Code_2008-10-14_2257.zip
. ¿Hay alguna manera fácil de hacer esto, independientemente de la configuración regional de la máquina?
Realmente no me importa el formato de fecha, idealmente sería aaaa-mm-dd, pero cualquier cosa simple está bien.
Hasta ahora tengo esto, que en mi máquina me da 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
Puedo vivir con esto, pero parece un poco torpe. Idealmente, sería más breve y tendría el formato mencionado anteriormente.
Estoy usando Windows Server 2003 y Windows XP Professional. No quiero instalar utilidades adicionales para lograr esto (aunque me doy cuenta de que hay algunas que harán un buen formato de fecha).
[datetime]::now.tostring("yyyy-MM-dd")
Respuestas:
Consulte Windows Batch File (.bat) para obtener la fecha actual en formato MMDDYYYY :
Si prefiere la hora en formato militar / de 24 horas, puede reemplazar la segunda línea FOR con esto:
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:
fuente
For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%b-%%a)
la segunda línea.For /f "tokens=1-2 delims=/: " %%a in ("%TIME%") do (if %%a LSS 10 (set mytime=0%%a%%b) else (set mytime=%%a%%b))
Eso devuelve valores como "0001" y "0315" que prefiero en mis nombres de archivo.wmic
comando! Hasta ahora solo he vistoWMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table
. Del mismo modo, para llegar20120623-1619
a mi zona horaria local de Amsterdam, en una línea:for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a) & set datetime=%ts:~0,8%-%ts:~8,4%
%%a was unexpected at this time.
Análisis de fecha y hora regionalmente independiente
El formato de salida de
%DATE%
y deldir
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 condate.exe
.Ejemplos: (en un cmd-script 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 de año, mes, día y hora:
Utilizándolo en un script CMD para obtener una marca de tiempo en cualquier formato requerido:
Extraer la información de fecha / hora de cualquier archivo de referencia.
Agregar a un archivo su información de fecha / hora:
date.exe es parte de las herramientas gratuitas de GNU que no necesitan instalación.
NOTA: Copiar
date.exe
en cualquier directorio que se encuentre en la ruta de búsqueda puede provocar que otros scripts fallen al usar eldate
comando incorporado de Windows .fuente
date.exe
parece depender de la configuración regional. Devuelve la fecha en dd / MM / aaaa en mi sistema, si fuera independiente de la ubicación, esperaría MM / dd / aaaa o aaaa-MM-dd. No creo que esta respuesta esté hablando del date.exe incorporado, sino de alguna versión de terceros.Dos formas más que no dependen de la configuración de tiempo (ambas tomadas de : Cómo obtener datos / tiempo 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 CADA sistema de Windows (rápido, pero crea un pequeño archivo temporal) (el script foxidrive):
Más información sobre la función get-date .
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 superior:
Y tres formas más que usan otros lenguajes de script de Windows. Le darán más flexibilidad, por ejemplo, puede obtener la semana del año, el tiempo en milisegundos, etc.
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 puede deshabilitarse a través del registro, es un caso raro ):Híbrido VSCRIPT / BATCH ( ¿Es posible incrustar y ejecutar VBScript dentro de un archivo por lotes sin usar un archivo temporal? ) El mismo caso que JScript, pero la hibridación no es tan perfecta:
PowerShell : se puede instalar en todas las máquinas que tienen .NET: descárguelo de Microsoft ( v1 , v2 , v3 (solo para Windows 7 y superior)). Se instala de manera predeterminada en todo, desde Windows 7 / Windows Server 2008 y superior:
Para usarlo desde un archivo por lotes:
Jscript.net/batch autocompilado (nunca he visto una máquina Windows sin .NET, por lo que creo que es bastante portátil):
Logman Esto no puede obtener el año y el día de la semana. Es relativamente 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 nunca será utilizado por nadie, incluido yo, pero es una forma más ...
Una forma más con WMIC que también proporciona la semana del año y el día de la semana, pero no los milisegundos (para milisegundos, verifique la respuesta de foxidrive):
Usando TYPEPERF con algunos esfuerzos para ser rápido y compatible con diferentes configuraciones de idioma y lo más rápido posible:
MSHTA permite llamar a métodos JavaScript similares al método JScript demostrado en el n. ° 3 anterior. Tenga en cuenta que las propiedades del objeto Fecha de JavaScript que incluyen valores de mes están numeradas del 0 al 11, no del 1 al 12. Por lo tanto, un valor de 9 significa octubre.
fuente
makecab
: esto funciona creando un archivo llamado~.rpt
y buscandostring
dentro de él, comenzando conmakecab
, que es una línea comoMakeCAB Report: Tue Sep 02 22:15:57 2014
. para mí este comando no está localizado, es independiente de la configuración regional. Este truco se basa en eso. ¡Esperemos que nunca lo sea, o ten cuidado!mshta
híbrido? :) ¿Te importa si edito tu respuesta y agrego una? Esta parece ser la mejor colección de soluciones esotéricas, y parece quemshta
pertenece aquí.Aquí hay una variante de alt.msdos.batch.nt que funciona localmente de forma independiente.
Ponga esto en un archivo de texto, por ejemplo getDate.cmd
Para que el código funcione sin msg de error en stderr, tuve que agregar las comillas simples alrededor de las asignaciones de variables para %% a, %% by %% c. Mi configuración regional (PT) estaba causando errores en una etapa del bucle / análisis donde se ejecutaban cosas como "set = 20". Las comillas producen un token (aunque vacío) para el lado izquierdo de la declaración de asignación.
La desventaja son los nombres de variables locales desordenadas: 'aa', 'mm' y 'dd'. Pero oye, a quién le importa!
fuente
dd
,mm
yyy
en la salida deecho:^|date
.date
daGeben Sie das neue Datum ein: (TT-MM-JJ)
, dondeJJ
rompe el guión (esperaYY
))Yo uso esto (de nuevo, no es independiente de la región (Reino Unido))
fuente
Las primeras cuatro líneas de este código le proporcionarán variables fiables YY DD MM YYYY HH Min Sec en Windows XP Professional y superior.
fuente
Lamentablemente, esto no es inmune a la configuración regional, pero hace lo que desea.
Increíble lo que puedes encontrar en Wikipedia .
fuente
Utilice el siguiente script para obtener el día actual en la línea de comando:
fuente
Otra forma ( crédito ):
Tenga en cuenta que mis dos respuestas aquí todavía dependen del orden del día y el mes según lo determinado por la configuración regional; no estoy seguro de cómo solucionarlo.
fuente
fuente
http://www.dotnetperls.com/7-zip-examples
Tiene algunos puntos buenos que pueden ser útiles para alguien en el futuro.Esto no es realmente más breve, pero podría ser una forma más flexible ( crédito ):
fuente
Aquí hay una manera de obtener la hora de la fecha en una sola línea:
En los Estados Unidos esto generará "aaaa-mm-dd hhmm". La configuración regional diferente dará como resultado diferentes salidas de% date%, pero puede modificar el orden del token.
Si desea un formato diferente, modifique la declaración de eco reorganizando los tokens o usando separadores diferentes (o no).
fuente
Solo usa esta línea:
fuente
Respuesta corta :
Respuesta larga
fuente
La solución de una línea de Matthew Johnson para obtener la fecha y hora de una línea es elocuente y útil.
Sin embargo, necesita una modificación simple para funcionar desde un archivo por lotes:
fuente
echo %date:/=-%%time::=-%
Y aquí hay un archivo por lotes similar para la porción de tiempo.
--jeroen
fuente
z: & forfiles /m *.jpg /s /d 07/16/2015 /c “cmd /c echo @fdate @ftime @path”
pero quiero saber cómo cargar archivos de acuerdo con la fecha de creación. Cualquier ayuda será muy apreciada. Se ha hecho una pregunta en stackoverflow pero aún no hay respuesta. Por favor, eche un vistazo al enlace para ver los detalles stackoverflow.com/q/32293517/3327081forfiles
.Cambié la respuesta con el archivo por lotes de vMax para que también funcione con el idioma holandés.
Los holandeses - persistente como somos - tenemos algunos cambios en el
%date%
,date/t
ydate
que rompen el lote archivo original.Sería bueno si algunas personas pueden verificar esto también con otras configuraciones regionales de Windows e informar los resultados.
Si el archivo por lotes falla en su ubicación, incluya el resultado de estas dos declaraciones en el símbolo del sistema:
echo:^|date
date/t
Esta es una muestra del resultado que debe obtener del archivo por lotes:
Aquí está el código revisado con comentarios sobre por qué:
--jeroen
fuente
jj-mm-aaaa
para jour, mois, annee? Los italianos tal vezgg/mm/aaaa
por giorno, mese, anno? ¿Alemanestt.mm.jjjj
para Tag, Monat, Jahr? Pero entonces: supongo que en la mayoría de los países solo se usan unos pocos idiomas. Al igual que en los Países Bajos, Windows suele ser inglés u holandés, no mucho más. Suficientemente bueno para mi.jj
y no exige un año de 4 dígitos), pero se usashift
para descartar el día comoMon
oma
. Sólo diferente.(TT-MM-JJ)
, ladate/t
salida es23.06.2012
. / cc @Arjanreg query "HKCU\Control Panel\International" /vShortDate
. Tenga cuidado durante las pruebas: para un comando de apertura rápida, el cambio que la fijación de panel de control también cambia el formato utilizado para mostrar la fecha (por tantodate
, ydate /t
eecho %date%
), pero en Windows 7 no cambia el formato de la nueva fecha! Como cambiar mi formato de fecha corta enYY/MM/dd
, me molesta:The current date is: 12/06/23 Enter the new date: (mm-dd-yy)
. Abrir un nuevo símbolo del sistema corrige eso.reg query "HKCU\Control Panel\International" /v sShortDate
.Esto es lo que he usado:
Si desea más ideas para automatizar las copias de seguridad en archivos 7-Zip, tengo un proyecto gratuito / abierto que puede usar o revisar para obtener ideas: http://wittman.org/ziparcy/
fuente
Tuve un problema similar. Tengo una descarga diaria automática desde un servidor FTP de un archivo encriptado. Quería descifrar el archivo usando gpg, cambiar el nombre del archivo a la fecha actual (formato AAAAMMDD) y soltar el archivo descifrado en una carpeta para el departamento correcto.
Revisé varias sugerencias para cambiar el nombre del archivo según la fecha y no tuve suerte hasta que me topé con esta solución simple.
Funcionó perfectamente (es decir, el nombre del archivo aparece como "2011-06-14.txt").
(Fuente)
fuente
Una función que se basa en
wmic
:Al revés: Región independiente. Abajo: solo los administradores del sistema pueden ejecutar wmic.exe.
Uso:
Esto hace eco de una cadena como esta:
Tenga en cuenta que los parámetros de la función están fuera de los parámetros, es decir, debe proporcionar nombres de variables en lugar de valores.
Todos los parámetros son opcionales, por lo que
call:Now Y M
es una llamada válida si solo desea obtener año y mes.fuente
http://sourceforge.net/projects/unxutils/files/
Busque dentro del archivo ZIP algo llamado "Date.exe" y cámbiele el nombre por "DateFormat.exe" (para evitar conflictos).
Póngalo en su carpeta system32 de Windows.
Tiene muchas opciones de "salida de fecha".
Para obtener ayuda, use
DateFormat.exe --h
No estoy seguro de cómo colocaría su salida en una variable de entorno ... usando SET.
fuente
Solución regional independiente que genera el formato de fecha ISO:
Lo que aún podría optimizarse: otros procesos pueden confundirse si se usa el formato de fecha en el período corto mientras se modifica. Por lo tanto, analizar la salida de acuerdo con la cadena de formato existente podría ser 'más seguro', pero será más complicado
fuente
fuente
Dada una localidad conocida, para referencia en forma funcional. La
ECHOTIMESTAMP
llamada muestra cómo obtener la marca de tiempo en una variable (DTS
en este ejemplo).Y guardado en el archivo, timestamp.bat, aquí está el resultado:
fuente
(yy)yy年m月d日 hh:mm
- sin ceros a la izquierda. (aa) podría ignorarse ya que tenemos un año de 2 dígitos o un año de 4 dígitos. Pero tenga en cuenta una cosa: el formato de fecha y hora se puede cambiar por máquina.systeminfo
en la CLI y déjame saber lo que vesSystem Locale
. El programa tarda en ejecutarse, pero tal vez el resultado de la configuración regional podría almacenarse en caché y posteriormente utilizarse para indexar un formato de marca de tiempo.Con Windows 7, este código funciona para mí:
fuente
independent of the regional settings of the machine
Observo que la o / p no solicitó una solución independiente de la región. Sin embargo, mi solución es para el Reino Unido.
Esta es la solución más simple posible, una solución de 1 línea, para usar en un archivo Batch:
fuente
...particularly because of the regional settings issue with using date
. Por cierto. Su solución es la misma que las otras veinte respuestas.echo %date:/=-%
Sé que ya hay muchas maneras mencionadas. Pero aquí está mi manera de desglosarlo para comprender cómo se hace. Con suerte, es útil para alguien a quien le guste el método paso a paso.
fuente
independent of the regional settings of the machine