Вложенные операторы в Windows cmd (.bat) - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь привести в порядок какой-то код. Прямо сейчас у меня есть:

SET VAR=%TIME:.=&rem.%
SET VAR=%VAR:,=&rem.%
SET VAR=%VAR::=_%

И это работает, но я бы хотел превратить его в однострочник. Примерно так (не работает):

SET VAR=% % %TIME:.=&rem% :,=&rem.% ::=_%

Можно ли добиться чего-то подобного с помощью краткого и простого синтаксиса?

1 Ответ

0 голосов
/ 14 ноября 2018

Хотя это можно сделать в одну строку (требуется отложенное расширение ), я не думаю, что оно служит удобочитаемости:

@echo off
setlocal enabledelayedexpansion
set "var=%time:~0,8%" & set "var=!var::=_!"
echo %var%

Я предлагаю перенести форматирование вподпрограмма.(Не совсем однострочный, но ваш основной код остается чистым и читабельным).

@echo off
call :FormatTime var="%time%"
echo %var%
goto :eof

:FormatTime
  set "_=%~2"
  set "_=%_:~0,8%"  :: get 'HH:MM:SS'
  set "_=%_: =0%"   :: replace ' ' with '0' 
  set "%1=%_::=_%"  :: replace ':' with '_' 
goto :eof

call определяет имя переменной для результата (var здесь) и строку для форматирования (%time% здесь).Обычно два аргумента разделяются пробелом, но поскольку = также действует как стандартный разделитель, мы можем использовать его, чтобы сделать строку еще более читаемой (интуитивно понятной).
Заключение строки в кавычки ("%time%) позволяет нам поймать пробел (" 8:12:00,99"), чтобы иметь возможность заменить его на ноль.

Я также использовал другой метод для удаления части миллисекунд (не зависит от языка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...