Как манипулировать переменной несколько раз в одной команде в CMD?

Каждый. Мне было интересно, можно ли манипулировать переменной несколько раз в одной команде?

Например, я хочу SUBSTRING и REPLACE TEXT в виде следующих команд:

:: Print the first 8 characters:
echo %TIME:~0:8%

:: Replace white spaces with zeros
echo %TIME: =0%

Желаемый результат (время печати без миллисекунд и замена пробела слева на 0)

09:15:23

Итак, могу ли я объединить обе операции с переменными в одну команду?

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

Нет. Замены смещения и замены не могут быть объединены в одну команду.

T3RR0R 09.02.2023 14:20

@ T3RR0R Было бы возможно, если бы мы использовали трубу?

CodingNoob 09.02.2023 14:36

Ваш вопрос был, можно ли это сделать одной командой, ответ - нет. Это можно сделать как несколько команд в одной строке, но это не то, о чем вы просили.

T3RR0R 09.02.2023 15:10

Боюсь, я не понимаю, что именно вы имеете в виду... Ваш первый пример не получает SUBSTRING, это echo (вывод) результат на экране. То же самое во втором вашем примере. Команда для получения подстроки или замены текста — SET. Я думаю, вы путаете команду с манипулированием переменной, а манипулирование переменной управляет только одной переменной. Пожалуйста, приведите пример того, что вы хотите получить в результате...

Aacini 09.02.2023 15:58

@Аачини Хорошо. Я постараюсь.

CodingNoob 09.02.2023 16:15

@ T3RR0R Я просто хочу выполнить обе команды, не сохраняя время в переменной, которую мне нужно создать. Я не возражаю против нескольких команд или каналов, если я не инициализирую переменную.

CodingNoob 09.02.2023 16:22

@Aacini Может быть, терминология программирования не для меня. Я, возможно, не ясно выразился. Я думал, что %TIME% действительно является переменной среды в Windows. В любом случае, я просто хочу добиться результата команд, упомянутых выше, без необходимости инициализации дополнительной переменной в качестве обходного пути.

CodingNoob 09.02.2023 16:26

@CodingNoob это как раз и есть цель переменных. Если все, что вы хотите сделать, это вывести время в этом формате с вашим произвольным требованием не устанавливать или изменять переменные, используйте команду powershell: powershell -c get-date -format hh:mm:ss

T3RR0R 09.02.2023 16:40

@ T3RR0R Большое спасибо за вашу помощь. К сожалению, я не могу использовать powershell. Я застрял с CMD по причинам.

CodingNoob 09.02.2023 16:44

ХОРОШО. Это обман. Это достигает того, что вы хотите, без инициализации дополнительной переменной: set "TIME=%TIME: =0%" & echo !TIME:~0,8! & set "TIME = " Требуется EnableDelayedExpansion...

Aacini 09.02.2023 17:54

@Aacini По крайней мере, ваша команда решила мою проблему. Пожалуйста, опубликуйте его как ответ (с EnableDelayedExpansion), чтобы я мог принять его как ответ. Большое спасибо за сотрудничество.

CodingNoob 12.02.2023 07:23

Сделанный. Смотрите ниже...

Aacini 13.02.2023 04:55
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
12
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

невозможно в одной команде, но возможно в одной строке без установки другой переменной среды:

for /f "delims=.," %%a in ("%time: =0%") do echo %%a

Вы уже знаете, как заменять пробелы нулями. Цикл for анализирует результат, эффективно удаляя сантисекунды. "Delims=.," заботится о разделителе (, в некоторых языках, . в других)

Спасибо вам за вашу помощь. Я проверил вашу команду, но она не сработала для меня. Я проверил это прямо в окне CMD. Есть ли другие вещи, которые мне нужно сделать?

CodingNoob 12.02.2023 08:40

Для использования непосредственно в командной строке замените каждый %%a на %a. Если это все еще терпит неудачу, сообщите мне точный результат, который Вы получаете.

Stephan 12.02.2023 11:56
Ответ принят как подходящий

Каждое манипулирование переменной манипулирует одной переменной, поэтому для вашего результата требуются две команды. Однако вы можете поместить две команды в одну строку и повторно использовать одну и ту же переменную, чтобы не инициализировать дополнительную переменную. То есть:

@echo off
setlocal EnableDelayedExpansion

set "TIME=%TIME: =0%" & echo !TIME:~0,8! & set "TIME = "

Другие вопросы по теме