Показать полную графическую версию : [решено] проблема с датой
всем привет.
коллеги, объясните почему:
если час содержит два числа, т.е. с 10 до 24
O:\>%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%_%TIME:~0,2%.%TIME:~3,2%
"2019.10.24_17.07"
если час содержит одно число, т.е. с 0 до 10
O:\>%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%_%TIME:~0,2%.%TIME:~3,2%
"2019.10.25_"
O:\>%TIME:~0,2%
"9"
O:\>%TIME:~3,2%
"22"
O:\>%TIME:~0,2%.%TIME:~3,2%
"9.22"
как так?! и что делать?
megaloman
28-10-2019, 13:10
chek, Проблема в настройке формата отображения даты и времени в системе - посмотрите, как у Вас установлено.
Я обычно настраиваю форматы dd.MM.yyyy HH:mm:ss
Для ясности сделайте
Echo "%Date%" "%Time%"
для разных значений дат и времени.
Увидите, что позиции компонентов даты и времени разные, в зависимости от количества в них цифр.
Если эти манипуляции с датой/временем надо для командного файла, то, чтобы не зависеть от этой настройки, я предпочитаю:@Echo Off
cls
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@DT=%%d"
Echo %@DT%
Echo 01234567890123
Echo.
Echo %@DT:~0,4%.%@DT:~4,2%.%@DT:~6,2%_%@DT:~8,2%.%@DT:~10,2%.%@DT:~12,2%
pause
Exit /B 0
Выделенные строки носят иллюстративный характер и для логики работы не нужны.
так команда у меня выдает результат, это видно из последнего примера, а вот если целиком строку, то нет.
Echo "%Date%" "%Time%" будет разный, т.к. количество символов в time меньше, это понятно.
но какая разница сколько этих символов выводить в ответ?
Petya V4sechkin
28-10-2019, 15:11
chek, у вас же нет команды Echo, в приведённом вами фрагменте попытка выполнить код.
Фактически там запуск:
2019.10.25_ 9.22
с пробелом, который cmd вставляет в %Time% при формате H:mm:ss, если H < 10.
DJ Mogarych
28-10-2019, 15:19
что делать? »
Переходить на Powershell.
get-date -f "dd.MM.yyyy HH:mm:ss"
megaloman
28-10-2019, 15:38
chek, Жить надо честно! :) Вы писАли:O:\>%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%_%TIME:~0,2%.%TIME:~3,2%
"2019.10.24_17.07" »
O:\>%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%_%TIME:~0,2%.%TIME:~3,2%
"2019.10.25_" »но это полуправда, Вы не отобразили точно, что появилось в результате Вашей манипуляции (спасибо, что Petya V4sechkin, натыркал меня носом).
"2019.10.28_" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
"2019.10.28_15.28" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
В командной строке Вы формируете команду.
Когда в часе 1 символ, перед ним присутствует пробел (2019.10.28_ 5.25), а когда 2 - пробела нет (2019.10.28_15.25).
Соответственно, в первом случае присутствует попытка интерпретировать первую команду до пробела, а хвост интерпретатору уже не интересен.
И в любом случае Вы получаете сообщение об ошибке выполнения - нет таких команд.
Вот если бы Вы написАли
Echo %DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%_%TIME:~0,2%.%TIME:~3,2%
всё было бы корректно
2019.10.28_ 5.25
теперь ясно.
к сожалению перевод времени на полный формат мне не помог, то ли не влияет на cmd, то ли особенность server 2019.
пришлось вводить доп переменную, которая убирает ноль
set HTime=%time: =0%
и использовать ее в дальнейшем
%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%_%HTime:~0,2%.%TIME:~3,2%
пришлось вводить доп переменную, которая убирает ноль »
а если наоборот (http://forum.oszone.net/post-2848083-14.html), добавлять 0 там где его нет.
megaloman
06-11-2019, 18:41
chek, пришлось вводить доп переменную, которая убирает ноль
set HTime=%time: =0% »Вы сделалидобавлять 0 там где его нет. »вместо пробела
А почему бы wmic не использовать?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.