Tienes que tener cuidado con lo que quieres hacer, porque no solo se trata de conseguir tiempo.
El lote tiene variables internas para representar la fecha y la fecha: % FECHA%% TIEMPO%. Pero dependen de la configuración regional de Windows.
% Fecha%:
- dd.MM.yyyy
- dd.mm.aa
- dMyy
- dd/mm/aa
- aaaa-MM-dd
% TIME% :
- H: mm: ss, ms
- HH: mm: ss, ms
Ahora, el tiempo que el guión va a funcionar y cuándo? Por ejemplo, si va a durar más de un día y pasa la medianoche definitivamente va a salir mal, ¡porque la diferencia entre 2 marcas de tiempo entre una medianoche es un valor negativo! Necesita la fecha para averiguar la distancia correcta entre días, pero ¿cómo lo hace si el formato de fecha no es una constante? Las cosas con % DATE% y % TIME% pueden ser aún más graves si continúa usándolas para fines matemáticos.
La razón es la % FECHA% y % TIEMPO% son existe sólo para mostrar una fecha y una hora de usuario en la salida, no utilizarlos para los cálculos. Por lo tanto, si desea establecer la distancia correcta entre algunos valores de tiempo o generar algún valor único dependiente de la fecha y la hora, debe usar algo diferente y preciso que % DATE% y % TIME%.
estoy usando las ventanas wmic incorporadas utilidad para solicitar este tipo de cosas (lo puso en un archivo de script):
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE`) do if "%%i" == "LocalDateTime" echo.%%j
o escriba en la consola cmd.exe:
for /F "usebackq tokens=1,2 delims==" %i in (`wmic os get LocalDateTime /VALUE`) do @if "%i" == "LocalDateTime" echo.%j
El desventaja de esto es un rendimiento lento en caso de llamadas frecuentes. En la máquina de minas, se trata de 12 llamadas por segundo.
Si desea seguir utilizando esto, entonces usted puede escribir algo como esto (get_datetime.bat):
@echo off
rem Description:
rem Independent to Windows locale date/time request.
rem Drop last error level
cd .
rem drop return value
set "RETURN_VALUE="
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if "%%i" == "LocalDateTime" set "RETURN_VALUE=%%j"
if not "%RETURN_VALUE%" == "" (
set "RETURN_VALUE=%RETURN_VALUE:~0,18%"
exit /b 0
)
exit /b 1
Ahora, puede analizar % RETURN_VALUE% somethere en el script:
call get_datetime.bat
set "FILE_SUFFIX=%RETURN_VALUE:.=_%"
set "FILE_SUFFIX=%FILE_SUFFIX:~8,2%_%FILE_SUFFIX:~10,2%_%FILE_SUFFIX:~12,6%"
echo.%FILE_SUFFIX%
En mi máquina, muestra el mismo tiempo, incluso si duermo entre llamadas. –
¿Se puede publicar el código del archivo de proceso por lotes que está tratando de crear? –
nm, soy un idiota. :) –