Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск в файле и запись в переменную

Ответить
Настройки темы
CMD/BAT - [решено] Поиск в файле и запись в переменную

Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток Уважаемые!
Есть задача: Нужно в файле средствами CMD найти все строки совпадающие с заданным условием поиска в переменной %name% (это текст фамилия или часть названия организации) и ВСЕ найденные строки записать каждую в свою переменную для дальнейшего выбора пользователя нужной переменной (в виде cmd под цифрами 1,2,3 и т.д.) Пользователь выбирает и процесс идет дальше.

В принципе к Вам вопрос о том: каким образом записать все найденные варианты в каждый в свою переменную и сделать выбор под цифрами полученных результатов...

Отправлено: 11:15, 25-11-2019

 

Аватара для V!RTuE

Пользователь


Сообщения: 90
Благодарности: 6

Профиль | Отправить PM | Цитировать


megaloman, если в искомом файле нет записей о клиентских сертификатах, то появляется надпись:
Цитата:
Переменная среды x@@ не определена
Как ее можно убрать?
В остальном всё прекрасно работает

Отправлено: 23:15, 09-01-2023 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для V!RTuE

Пользователь


Сообщения: 90
Благодарности: 6

Профиль | Отправить PM | Цитировать


Разобрался вроде.
Добавил в начале:
Код: Выделить весь код
set "xx="
и далее добавил проверку:
Код: Выделить весь код
if "%xx%" == "" GoTo :SKIP
Полностью код выглядит у меня так:
Код: Выделить весь код
:: Показать список клиентов
	CALL :EchoColor 6 "	Список клиентов:"&echo.
	echo.
	set "xx="
	Set /A y=0
	FOR /F "usebackq skip=1 tokens=1,7 delims=/" %%i In ("%indextxt%") DO (
		Set /A y+=1
		Set "xx=%%j"
		Call Set "x@@%%xx:~3%%=%%xx:~3%%"
		Echo %%i| >nul 2>nul FindStr /B /I /C:"R"&&Call Set "x@@%%xx:~3%%=%%xx:~3%% [ОТОЗВАН]"
	)
	If %y% EQU 0 (CALL :EchoColor 4 "[X] Клиентские сертификаты [НЕ НАЙДЕНЫ]"&echo. &echo.)
	
	if "%xx%" == "" GoTo :SKIP
	
	Set /A y=0
	FOR /F "usebackq tokens=2 delims==" %%i In (`Set "x@@"^|Sort`) DO (
		Set /A y+=1
		Call Set "@@%%y%%=%%i"
	)
	
	FOR /L %%i In (1,1,%y%) Do (Set "xx=     %%i"&Call Echo %%xx:~-4%%. %%@@%%i%%)
	
	:SKIP

Отправлено: 23:48, 09-01-2023 | #12


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


V!RTuE, ИМХО, надо так:
Код: Выделить весь код
@Echo Off
cls
>nul Chcp 1251
	Set "FileIn=Z:\Program Files\OpenVPN\easy-rsa\keys\index.txt"

	If Not Exist "%FileIn%" (Echo Файл "%FileIn%" не найден. &Echo. &Pause &Exit /B 2)

	FOR /F "usebackq skip=1 tokens=1,7 delims=/" %%i In ("%FileIn%") DO (
		Set "xx=%%j"
		Call Set "x@@%%xx:~3%%=%%xx:~3%%"
		Echo %%i| >nul 2>nul FindStr /B /I /C:"R"&&Call Set "x@@%%xx:~3%%=%%xx:~3%% [ОТОЗВАН]"
	)
	>nul 2>&1 Set "x@@" ||(Echo Пользовательские сертификаты не найдены. &Echo. &Pause &Exit /B 1)

	Set /A y=0
	FOR /F "usebackq tokens=2 delims==" %%i In (`Set "x@@"^|Sort`) DO (
		Set /A y+=1
		Call Set "@@%%y%%=%%i"
	)

	Echo Введите номер, соответствующий сертификату, который требуется отозвать (Enter - завершение работы):
	Echo.
	FOR /L %%i In (1,1,%y%) Do (Set "xx=     %%i"&Call Echo %%xx:~-4%%. %%@@%%i%%)

	:Begin
		Echo.
		Set "NN="
		Set /P NN=Выбираем номер N=
		If "%NN%"=="" Exit /B 0
		If 1 LEQ %NN% If %NN% LEQ %y% (Call Set "Select=%%@@%NN%%%" &GoTo :End)
		Echo Введено неверное значение "%NN%", введите верное: &GoTo :Begin
	:End
	Echo вы выбрали: "%Select%"
pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 12:35, 10-01-2023 | #13


Аватара для V!RTuE

Пользователь


Сообщения: 90
Благодарности: 6

Профиль | Отправить PM | Цитировать


megaloman, всё-равно появляется ошибка. Так как у меня в 2 местах подобный скрипт используется. Первое - это когда надо отозвать сертификат, то там при не нахождении искомой записи скрипт должен завершить работу (точнее вернуться в предыдущий пункт меню).
И второй случай это при создании нового сертификата у меня показывается нумерованный список уже имеющихся, но не без необходимости с ними что-либо делать. Эту часть кода я убрал:
Скрытый текст
Код: Выделить весь код
:Begin
		Echo.
		Set "NN="
		Set /P NN=Выбираем номер N=
		If "%NN%"=="" Exit /B 0
		If 1 LEQ %NN% If %NN% LEQ %y% (Call Set "Select=%%@@%NN%%%" &GoTo :End)
		Echo Введено неверное значение "%NN%", введите верное: &GoTo :Begin
	:End
	Echo вы выбрали: "%Select%"

поэтому если и не найдено записей, то я решил, что проще пропустить часть кода, сделав соответствующую метку и перейдя сразу к ней. Ну и надо учитывать, что не закрывая скрипт может потребоваться несколько раз выполнять этот код. и могут как присутствовать записи о сертификатах, так и нет. Чтобы не принимало %xx% старое значение я каждый раз присваиваю ему пустое значение.
Вот исправил, как вы написали.
Исполняемый код:
Код: Выделить весь код
	:: Показать список клиентов
	CALL :EchoColor 6 "	Список клиентов:"&echo.
	echo.
	FOR /F "usebackq skip=1 tokens=1,7 delims=/" %%i In ("%indextxt%") DO (
		Set "xx=%%j"
		Call Set "x@@%%xx:~3%%=%%xx:~3%%"
		Echo %%i| >nul 2>nul FindStr /B /I /C:"R"&&Call Set "x@@%%xx:~3%%=%%xx:~3%% [ОТОЗВАН]"
	)
	>nul 2>&1 Set "x@@" ||(CALL :EchoColor 4 "[X] Клиентские сертификаты [НЕ НАЙДЕНЫ]"&echo. &echo.)
	
	Set /A y=0
	FOR /F "usebackq tokens=2 delims==" %%i In (`Set "x@@"^|Sort`) DO (
		Set /A y+=1
		Call Set "@@%%y%%=%%i"
	)
	
	FOR /L %%i In (1,1,%y%) Do (Set "xx=     %%i"&Call Echo %%xx:~-4%%. %%@@%%i%%)
	
	:SKIP
	CALL :EchoColor 3 "================================================================================"&echo.
	echo.

Вот результат:
Цитата:
Список клиентов:

[X] Клиентские сертификаты [НЕ НАЙДЕНЫ]

Переменная среды x@@ не определена
================================================================================

P.S.: Опубликовал полностью свой проект OpenVPN-All-in-One - Скрипт,облегчающий создание серверной и клиентской части OpenVPN
Если будет желание и время разобраться, то прошу ознакомиться. Лучше там продолжить обсуждение.

Последний раз редактировалось V!RTuE, 11-01-2023 в 00:59.


Отправлено: 14:41, 10-01-2023 | #14



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск в файле и запись в переменную

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поиск нескольких строк в файле и запись их в переменную Alex S Скриптовые языки администрирования Windows 11 14-02-2019 18:59
CMD/BAT - поиск текста в файле и задание в переменную n0lkk Скриптовые языки администрирования Windows 5 03-10-2017 20:13
CMD/BAT - [решено] поиск файла по маске и запись этого имени в переменную ___dima___ Скриптовые языки администрирования Windows 20 18-06-2017 01:46
CMD/BAT - [решено] Поиск строк в файле и запись в новый файл vision-d Скриптовые языки администрирования Windows 17 06-10-2016 09:14
[решено] FileWriteLine - Поиск и запись в текстовом файле. nibble74 AutoIt 2 12-07-2016 12:56




 
Переход