Каждый. Мне было интересно, можно ли манипулировать переменной несколько раз в одной команде?
Например, я хочу 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 Было бы возможно, если бы мы использовали трубу?
Ваш вопрос был, можно ли это сделать одной командой, ответ - нет. Это можно сделать как несколько команд в одной строке, но это не то, о чем вы просили.
Боюсь, я не понимаю, что именно вы имеете в виду... Ваш первый пример не получает SUBSTRING, это echo
(вывод) результат на экране. То же самое во втором вашем примере. Команда для получения подстроки или замены текста — SET
. Я думаю, вы путаете команду с манипулированием переменной, а манипулирование переменной управляет только одной переменной. Пожалуйста, приведите пример того, что вы хотите получить в результате...
@Аачини Хорошо. Я постараюсь.
@ T3RR0R Я просто хочу выполнить обе команды, не сохраняя время в переменной, которую мне нужно создать. Я не возражаю против нескольких команд или каналов, если я не инициализирую переменную.
@Aacini Может быть, терминология программирования не для меня. Я, возможно, не ясно выразился. Я думал, что %TIME% действительно является переменной среды в Windows. В любом случае, я просто хочу добиться результата команд, упомянутых выше, без необходимости инициализации дополнительной переменной в качестве обходного пути.
@CodingNoob это как раз и есть цель переменных. Если все, что вы хотите сделать, это вывести время в этом формате с вашим произвольным требованием не устанавливать или изменять переменные, используйте команду powershell: powershell -c get-date -format hh:mm:ss
@ T3RR0R Большое спасибо за вашу помощь. К сожалению, я не могу использовать powershell. Я застрял с CMD по причинам.
ХОРОШО. Это обман. Это достигает того, что вы хотите, без инициализации дополнительной переменной: set "TIME=%TIME: =0%" & echo !TIME:~0,8! & set "TIME = "
Требуется EnableDelayedExpansion...
@Aacini По крайней мере, ваша команда решила мою проблему. Пожалуйста, опубликуйте его как ответ (с EnableDelayedExpansion), чтобы я мог принять его как ответ. Большое спасибо за сотрудничество.
Сделанный. Смотрите ниже...
невозможно в одной команде, но возможно в одной строке без установки другой переменной среды:
for /f "delims=.," %%a in ("%time: =0%") do echo %%a
Вы уже знаете, как заменять пробелы нулями. Цикл for
анализирует результат, эффективно удаляя сантисекунды. "Delims=.,"
заботится о разделителе (,
в некоторых языках, .
в других)
Спасибо вам за вашу помощь. Я проверил вашу команду, но она не сработала для меня. Я проверил это прямо в окне CMD. Есть ли другие вещи, которые мне нужно сделать?
Для использования непосредственно в командной строке замените каждый %%a
на %a
. Если это все еще терпит неудачу, сообщите мне точный результат, который Вы получаете.
Каждое манипулирование переменной манипулирует одной переменной, поэтому для вашего результата требуются две команды. Однако вы можете поместить две команды в одну строку и повторно использовать одну и ту же переменную, чтобы не инициализировать дополнительную переменную. То есть:
@echo off
setlocal EnableDelayedExpansion
set "TIME=%TIME: =0%" & echo !TIME:~0,8! & set "TIME = "
Нет. Замены смещения и замены не могут быть объединены в одну команду.