#cmd #find #command-prompt
#cmd #Найти #командная строка
Вопрос:
Команда
find /i "constructiontime" file.cfg
выводит строку
constructiontime(10);
Я хочу прочитать в этой строке и получить только номер, присвоенный переменной, независимо от того, какое числовое значение.
Как это можно сделать?
Ответ №1:
Решение заключается в использовании команды ДЛЯ:
@echo off
set "ConstrutionTime="
for /F "tokens=2 delims=()" %%I in ('%SystemRoot%System32find.exe /I "constructiontime" file.cfg') do set "ConstrutionTime=%%I"
if defined ConstrutionTime echo The construction time is: %ConstrutionTime%
FOR запускает командную строку, указанную в круглых скобках, в отдельном командном процессе, запущенном %ComSpec% /C
в фоновом режиме, и фиксирует все выходные данные для обработки стандартного вывода этого командного процесса, который является выводом FIND, если строка может быть найдена в любой строке.
После завершения запущенного командного процесса захваченный вывод обрабатывается построчно. Пустые строки игнорируются, а также строки, начинающиеся с точки с запятой, которая по умолчанию является символом конца строки.
FOR разбивает все остальные строки на подстроки, используя (
и )
в качестве разделителей из-за delims=()
. В данном случае используется первая подстрока constructiontime
, которая не представляет интереса. Вторая подстрока — 10
это строка, представляющая интерес. Третья подстрока будет ;
, которая также не представляет интереса. По этой причине tokens=2
используется для присвоения второй подстроки указанной переменной цикла I
.
Значение переменной цикла I
присваивается переменной среды ConstrutionTime
, которая используется в следующей командной строке для отображения результата при запуске этого небольшого пакетного файла из окна командной строки.
Для понимания используемых команд и того, как они работают, откройте окно командной строки, выполните в нем следующие команды и внимательно прочитайте полностью все страницы справки, отображаемые для каждой команды.
echo /?
find /?
for /?
if /?
set /?