Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] проблема с датой (http://forum.oszone.net/showthread.php?t=342714)

chek 28-10-2019 11:05 2893829

проблема с датой
 
всем привет.
коллеги, объясните почему:
если час содержит два числа, т.е. с 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 2893842

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

Выделенные строки носят иллюстративный характер и для логики работы не нужны.

chek 28-10-2019 14:54 2893852

так команда у меня выдает результат, это видно из последнего примера, а вот если целиком строку, то нет.
Echo "%Date%" "%Time%" будет разный, т.к. количество символов в time меньше, это понятно.
но какая разница сколько этих символов выводить в ответ?

Petya V4sechkin 28-10-2019 15:11 2893854

chek, у вас же нет команды Echo, в приведённом вами фрагменте попытка выполнить код.

Фактически там запуск:
2019.10.25_ 9.22
с пробелом, который cmd вставляет в %Time% при формате H:mm:ss, если H < 10.

DJ Mogarych 28-10-2019 15:19 2893857

Цитата:

Цитата chek
что делать? »

Переходить на Powershell.
Код:

get-date -f "dd.MM.yyyy HH:mm:ss"

megaloman 28-10-2019 15:38 2893860

chek, Жить надо честно! :) Вы писАли:
Цитата:

Цитата chek
O:\>%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%_%TIME:~0,2%.%TIME:~3,2%
"2019.10.24_17.07" »

Цитата:

Цитата chek
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

chek 06-11-2019 17:43 2895019

теперь ясно.
к сожалению перевод времени на полный формат мне не помог, то ли не влияет на cmd, то ли особенность server 2019.
пришлось вводить доп переменную, которая убирает ноль
set HTime=%time: =0%
и использовать ее в дальнейшем
%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%_%HTime:~0,2%.%TIME:~3,2%

alpap 06-11-2019 18:36 2895030

Цитата:

Цитата chek
пришлось вводить доп переменную, которая убирает ноль »

а если наоборот, добавлять 0 там где его нет.

megaloman 06-11-2019 18:41 2895031

chek,
Цитата:

Цитата chek
пришлось вводить доп переменную, которая убирает ноль
set HTime=%time: =0% »

Вы сделали
Цитата:

Цитата alpap
добавлять 0 там где его нет. »

вместо пробела
А почему бы wmic не использовать?


Время: 23:26.

Время: 23:26.
© OSzone.net 2001-