Estoy tratando de crear un archivo zip a partir de un script por lotes. Necesito que se nombre como archive_.zip
Desafortunadamente, esto no funciona en sistemas con la fecha formateada como y / m / d debido a las barras:
zip some_options "archive_%DATE%.zip"
La %DATE%
variable se expande a algo como
Mon 09/28/2009
Tengo acceso al paquete gnuwin32, por lo que podría usar, por ejemplo, sed
para reemplazar espacios y barras por guiones. El problema es, ¿cómo usaría la salida de sed
para crear el nombre de archivo del archivo zip?
En Unix (bash), uno puede usar comillas inversas para evaluar un comando en el lugar y usar su salida en otro comando, algo como:
zip [...] archive_`echo %DATE% | sed -e s/.../.../`.zip
¿Hay algo similar disponible en Windows?
¿O tal vez hay una manera de establecer una variable para el valor devuelto sed
y usarla para construir el nombre del archivo?
fuente
%date:~-10,2%-%date:~-7,2%-%date:~-4,4%
:!Yo siempre uso:
Entonces CDate será Sat02182012. Si desea hacerlo más ordenable, configure CDate en %% d - %% b - %% c para que sea 2012-02-18
Para hacer la carpeta de fecha / hora / archivo amigable.
fuente
He publicado una respuesta a una pregunta muy similar aquí . La división de la fecha en los campos se realiza en 1 línea, en lugar de varias líneas en la respuesta de harrymc.
La parte interesante es:
Y la advertencia sigue siendo relevante:
fuente
el
/=-
sustituye el/
con un signo menos.fuente
Este código bastante horrible debería hacer algo como lo que quieres
Si cambia el nombre del archivo adecuadamente.
fuente
echo %date:~6,4%%date:~3,2%%date:~0,2%
regresa9-289-20
a mi máquina ya que tengo la fecha establecida para usar aaaa-MM-dd (así que hoy es 28-09-2009).Dado que su pregunta está etiquetada como Windows, encontré esta solución que funciona en los viejos y buenos archivos .bat:
"Windows Batch File (.bat) para obtener la fecha actual en formato MMDDYYYY" ,
y probablemente pueda adaptarse a su caso:
esto no hace más que configurar la variable% date para que sea la fecha de hoy en formato MMDDYYYY para que pueda llamarse más adelante en el script.
Editar
Encontrado una mejor sintaxis. Dado que mi fecha es hoy "Lun 28/09/2009":
establecer día =% Fecha: ~ 0,2%
establecer mes =% Fecha: ~ 7,2%
establecer año =% Fecha: ~ 10,4%
fuente
versión cmd.exe pura en combinación con gnuwin32-'date ':
fuente
¿Qué pasa con el uso de cscript + vbasic:
llámalo a través de
fuente
Para / f "tokens = 1,2,3,4,5 delims = /." %% a in ('date / T') establezca CDate = %% d - %% b - %% c
@echo data =% CDate%
Esto es en el año-mes-día que es más común ahora días
fuente
Es probable que cualquier solución que use cualquiera de
%DATE%
los resultadosdate /t
se rompa si el usuario ha modificado su configuración regional. Por ejemplo, configuré mi formato de "fecha corta""yyyy-MM-dd"
, así que tengo%DATE%
igual a"2012-02-18"
, ydate /t
produce el mismo resultado. (Esto es para Windows 7; supongo que es lo mismo para versiones anteriores de Windows).Cree un archivo por lotes y luego ejecútelo.
Como tiene
date
disponible el comando GNU , puede hacer algo como esto:tmp.bat
contendrá algo como:Tenga en cuenta que esto crea
tmp.bat
en el directorio actual, lo que podría ser un problema; podría ser mejor crear%TEMP%\tmp.bat
. Tampoco eliminé el archivo después; Eso es bastante fácil de hacer.date +FORMAT
le permite especificar el formato de salida deldate
comando, similar a unaprintf
cadena de formato; Consulte la documentación de la fecha de Coreutils para más detalles. El formato puede incluir texto arbitrario, por lo que en este caso ni siquiera necesita usarlosed
.fuente
Supongo que si juntas todos los elementos, obtienes algo que funciona para ti. Esto está en un sistema Windows 2003 para darme una instantánea de los procesos en ejecución en respuesta a un disparador del monitor de rendimiento:
El archivo de salida se nombra en una cadena sin delimitadores.
fuente
Deberia trabajar.
Por otro lado, tal vez tenga un
date
comando disponible (no conozco Windows). En caso afirmativo, solo haz:fuente
no estoy seguro si te conviene, pero mi código es
fuente