lik173
@lik173
Хацкер

Почему bat выводит в wmic неправильный месяц?

Стоит скрипт:
for /f %%j in ('wmic path win32_utctime get /format:list ^| findstr "Day="') do (
set "toda=%%~j"
)

for /f %%t in ('wmic path win32_utctime get /format:list ^| findstr "Month="') do (
set "tomont=%%~t"
)

for /f %%i in ('wmic path win32_utctime get /format:list ^| findstr "Year="') do (
set "toyea=%%~i"
)

set today=%toda:~4,5%
set tomonth=%tomont:~6,7%
set toyear=%toyea:~5,8%


Также дополнен этим:
if %acday%==%today% (
if %month%==%tomonth% set "hb=echo Happy birthday!" && goto next
) else (goto next)

в этом самом :next такой код (изначально поставил set "hb=rem aaa"):
cls
%hb%
echo Hello, %name%!
echo Today: %today%.%tomonth%.%toyear%


При выполнении выводит:
Hello, lik173!
Today: 10.Month=2.2021


Почему Month=2? Сейчас 6 месяц.

Вывод wmic path win32_utctime get /format:list:

Day=10
DayOfWeek=4
Hour=9
Milliseconds=
Minute=35
Month=6
Quarter=2
Second=18
WeekInMonth=2
Year=2021

И час 9 показывает
А так 12 часов
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Потому что присвоилось значение из последней отфильтрованной findstrом записи: WeekInMonth=2
Вы можете в вызове wmic отфильтровать столбцы, которые он будет возвращать:
wmic path win32_utctime get Month /format:list

На счет часов - тут все просто вы вызываете win32_utctime - она возвращает время в UTC, как это ни странно. Очевидно, в винде выставлен московский часовой пояс - +3 к UTC.
Используйте win32_localtime вместо win32_utctime.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@yellowmew
Cloud infrastructure, monitoring engineer. SRE
win32_utctime
посмотри сколько сейчас времени по UTC и у вас (насколько я понимаю вы живете по московскому времени
алсо, для дебага - выведите себе результат
wmic path win32_utctime get /format:list и внимательно просмотрите.
Сейчас вторая неделя месяца и именно эта строка встречается последней (а не сам month) - поэтому ваши фильтры выцепляют именно ее.

А вообще закопайте уже стюардессу и пишите на powershell, если вы, конечно, не занимаетесь арехологией. Пометка: используйте Windows Powershell а не последний доступный Posh 7. Работа с wmi есть только в windows powershell, из более новых версий она выпилена в угоду кросплатформенности
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы