Назад | Перейти на главную страницу

Доступ к текущему времени в пакетном скрипте Windows

Мне нужен доступ к текущему времени из пакетного скрипта. При наборе время в cmd я получаю что-то вроде этого:

The current time is: 16:58:03.98
Enter the new time:

Мне нужно не это, а час, минуты и секунды в отдельных сегментах, которые я затем могу обработать любым произвольным образом. Другими словами, я ищу функцию, которая возвращает значение часа, чтобы я мог присвоить его переменной, например:

var hour = GetCurrentHour()

Спасибо!

Время и дата определяются в двух системных переменных:% time% и% date%.

(Будьте осторожны, формат зависит от региональных и языковых настроек)

C:> эхо% время%

17: 16: 13,39

C:> echo% date%

28.08.2009

C:>

FOR /F "TOKENS=1 DELIMS=:" %%A IN ('TIME/T') DO SET HH=%%A
FOR /F "TOKENS=2 DELIMS=:" %%A IN ('TIME/T') DO SET MM=%%A

теперь у вас есть две переменные% HH% для часов и% MM% для минут. Надеюсь, это помогло.

Объединение всех этих сообщений дает ответ на исходный вопрос:

for / f "tokens = 1-3 delims = :." %% A in ("% time%") do (

установить HH = %% A

установить MM = %% B

установить SS = %% C)

Загрузит ваши сегменты HH MM и SS с соответствующими значениями. Вы, конечно, можете ввести любые имена переменных вместо них. (За исключением зарезервированных имен.) Вы также можете опустить "." в разделе разделителей, если вы хотите, чтобы дробные секунды сохранялись в последнем значении. (% time% содержит ЧЧ: ММ: СС.сс)

Что вам нужно сделать, это в основном использовать переменную% time% и указать для подсчета определенного количества символов в строке для извлечения нужной части. Ввод «echo% time%» в командной строке возвращает что-то вроде этого:

11: 11: 38,36

Чтобы получить только час из этой строки, введите «echo% time: ~ -11,2%», чтобы отобразить только первые 2 символа. Вы в основном говорите ему отобразить переменную% time% - «echo% time ...», отсчитать 11 символов назад от конца строки - «...: ~ 11 ...» и взять 2 символа из этого балл - «..., 2%»

Чтобы получить минуты, используйте команду "echo% time: ~ 8,2%"

Чтобы установить для переменной «час» текущий час, введите следующее:

установить час =% времени: ~ -11,2%

Вы также можете связать части вместе, чтобы создать собственный формат в любой комбинации, которая вам также нужна. Например, чтобы добавить тире вместо двоеточия между ЧЧ: ММ: СС, введите следующее:

"echo% time: ~ -11,2% -% time: ~ -8,2% -% time: ~ -5,2%"

и получаем: ЧЧ-ММ-СС

Надеюсь это поможет. Мы постоянно используем переменную% date% и ее части для автоматического создания файлов в любой строковой комбинации, в которой нам нужно, чтобы имя файла было.

Объединив ответ Мерстзика и Бенуа и сохранив вызов внешней программы, вы можете сделать следующее:

FOR /F "TOKENS=1 DELIMS=:" %%A IN ("%TIME%") DO SET HH=%%A
FOR /F "TOKENS=2 DELIMS=:" %%A IN ("%TIME%") DO SET MM=%%A

Опасно пытаться сделать это в CMD, потому что результат TIME / T или% TIME% зависит от локали. Если вы настроены на один языковой стандарт, вы можете сделать это:

FOR /F "TOKENS=1,2 DELIMS=: " %%A IN ('TIME/T') DO SET HH=%%A && SET MM=%%B

Однако вам будет гораздо лучше использовать PowerShell. Сценарии CMD сложно писать надежно. О написании хороших сценариев CMD можно многому научиться, но лучше применить эти клетки мозга к PowerShell.

$hour = (Get-Date).Hour