Вы должны быть осторожны с тем, что вы хотите сделать, потому что сейчас не время.
Пакет имеет внутренние переменные для представления даты и времени: % DATE%% TIME% .
Но они зависят от локали Windows.
% Дата%
- ДД.ММ.ГГГГ
- DD.MM.YY
- d.M.yy
- дд / ММ / ГГ
- YYYY-MM-дд
% TIME% :
- H: мм: сс, мсек
- HH: мм: сс, мсек
Теперь, как долго и когда будет работать ваш скрипт? Например, если он будет длиннее дня и пройдет полночь, он определенно пойдет не так, потому что разница между двумя метками времени между полуночью является отрицательным значением! Вам нужна дата, чтобы узнать правильное расстояние между днями, но как это сделать, если формат даты не является константой? Вещи с % DATE% и % TIME% могут ухудшаться и ухудшаться, если вы продолжите использовать их в математических целях.
Причина в том, что существуют % DATE% и % TIME% только для отображения даты и времени для пользователя в выходных данных, а не для использования их для расчетов. Поэтому, если вы хотите установить правильное расстояние между некоторыми значениями времени или сгенерировать какое-то уникальное значение, зависящее от даты и времени, вам нужно использовать что-то другое и точное, чем % DATE% и % TIME% .
Я использую встроенную утилиту wmic для запроса таких вещей (поместите это в файл скрипта):
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE`) do if "%%i" == "LocalDateTime" echo.%%j
или введите его в консоли cmd.exe:
for /F "usebackq tokens=1,2 delims==" %i in (`wmic os get LocalDateTime /VALUE`) do @if "%i" == "LocalDateTime" echo.%j
Недостатком этого является низкая производительность при частых вызовах. На моей машине это около 12 вызовов в секунду.
Если вы хотите продолжить использовать это, вы можете написать что-то вроде этого ( 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
Теперь вы можете проанализировать % RETURN_VALUE% где-то в вашем скрипте:
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%