3

Я пишу скрипт для RAR-сжатия моих файлов и присваиваю результат с отметкой времени.

Я использую переменную среды TIME . Я тоже делаю

set _time=%TIME::=.%` 

использовать только разрешенные символы в имени файла.

Как избавиться от миллисекундной части %TIME% , например 16:35:42.07

3 ответа3

5

Просто отрежьте символы, которые вам больше не нужны:

 set _time=%_time:~0,-3%

Или получите полный желаемый результат прямо так:

set _time=%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%
2

Самый простой способ - поле миллисекунд всегда будет состоять из двух цифр: %_TIME:~0,-3%
Переводит, чтобы обрезать первые 0 символов, затем сохранить до (размер строки - 3) символов. Который оторвал бы .07 в вашем примере. На самом деле, это всегда должно работать: я только что понял, что вы используете встроенную переменную% time% (учит меня читать), которая всегда должна возвращаться с двузначным значением «мс».

Если ваши миллисекунды могут иметь разное количество цифр (например, 0.1 вместо 0.10), потребуется какая-то команда поиска строки. И вот оно:

Хорошо, это кажется хакерским ... но это командная строка Windows, так что, эй. Это обрежет точку и все после нее, поэтому будет работать независимо от того, сколько цифр точности соответствует вашему значению мс (например, 0.1 вместо 0.10).

SetLocal EnableDelayedExpansion

set _time=%time%_EndOfStringMarker
set __DotToEnd=%_time:*.=%
set _time=!_time:%__DotToEnd%=!
set _time=%_time:.=%

EndLocal && set _time=%_time%

Убедитесь, что в вашем времени есть только одна точка, когда она используется.

Попытка объяснить сейчас. Конечно, вы можете просто использовать его и избавить себя от головной боли, пытаясь понять.

  • SetLocal определяет локальную область видимости. Все, что изменилось между этим моментом и EndLocal, не будет длиться после EndLocal. Вы не можете иметь SetLocal внутри SetLocal.
  • EnableDelayedExpansion позволяет использовать!с, между прочим. Это позволяет мне использовать переменную внутри переменной.
  • Я добавляю _EndOfStringMarker, так что если значение ms (в вашем примере 07) встречается где-либо еще, например, значение секунд, которое не будет заменено.
  • Я обрезаю перед точкой, включая точку, оставляя меня со всем после точки. Командная строка не позволяет мне сделать это наоборот.
  • Я заменяю все после точки в исходной строке ничем, оставляя меня со временем, заканчивающимся точкой.
  • Я заменяю точку ничем.
  • Я заканчиваю местность, чтобы привести в порядок вещи. Чтобы сохранить новое значение времени вне этой локальной области, я должен установить его себе на той же строке. Это еще одна причуда командной строки.

Источник для хитрой обрезки до конца: http://ss64.com/nt/syntax-replace.html

0

Вы можете использовать переменный синтаксис:

@echo off
set hrs=%time:~0,2%
set mns=%time:~3,2%
set scs=%time:~6,2%
set mls=%time:~9,2%
set nmt=%time:~0,8%

Использовать% hrs% для часов

Используйте% mns% для минут

Используйте% scs% для секунд

Используйте% mls% за миллисекунды

Используйте% nmt% для времени без миллисекунд

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .