Как искать строку с ConstructionTime(10); в файле и получить номер, присвоенный переменной?

#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 /?