EDITAR: Una forma mejor de hacerlo es tomar una cadena de fecha y hora que tiene un formato definido e inmutable en lugar de utilizar las definidas por el entorno local de %date%
y %time%
. Se puede utilizar el siguiente conseguirlo:
for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined mydate set mydate=%%x
Se produce algo así como 20120730203126.530000+120
y se puede utilizar para construir que los nombres de archivo.
(vieja respuesta más abajo)
Usted puede simplemente reemplazar el carácter infractor con una cadena vacía:
echo %time::=%
La sintaxis %var:str1=str2%
toma la variable de entorno (o pseudo-variable en caso de %TIME%
y reemplaza str1
por str2
. Si nada sigue después del signo igual entonces str1
simplemente se elimina.
En su caso concreto creo que desearía lo siguiente:
rem cut off fractional seconds
set t=%time:~0,8%
rem replace colons with dashes
set t=%t::=-%
set FileName=Build-%date%-%t%
Una forma más de fuerza bruta en caso de que no sabe si se utilizan dos puntos (pero el orden del tiempo serían el mismo):
set FileName=Build-%date%-%time:~0,2%-%time:~3,2%-%time:~6,2%
Sin embargo, todas las cosas anteriores asumen que usted usa el formato de fecha ISO 8601 estándar, i. mi. 2009-10-29. Supongo que esto es simplemente normal, pero algunas personas usan otros formatos, así que ten cuidado. Pero como no preguntaste sobre la fecha en la que asumía, no tuviste ningún problema allí.
Maldita sea, es un truco elegante. :) genial –
No es tan poderoso como 'tr', quizás, pero suficiente para muchas necesidades. – Joey
% tiempo: ~ 0,2% -% tiempo: ~ 3,2% -% tiempo: ~ 6,2% crea una cadena con espacios en blanco antes de las 10:00 AM! – mcbainpc