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

Показать сообщение отдельно

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

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


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

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


megaloman, прошу помочь доработать ваш код.
Имеется текстовый файл следующего содержания:
index.txt
V 321223032921Z 01 unknown /C=RU/ST=Msk/L=Msk/O=MyOrg/OU=server/CN=server/name=server/emailAddress=mail@mail.ru
V 321223032955Z 02 unknown /C=RU/ST=Msk/L=Msk/O=MyOrg/OU=server/CN=admin/name=server/emailAddress=mail@mail.ru
V 321223035016Z 03 unknown /C=RU/ST=Msk/L=Msk/O=MyOrg/OU=server/CN=user1/name=server/emailAddress=mail@mail.ru
V 321223035451Z 04 unknown /C=RU/ST=Msk/L=Msk/O=MyOrg/OU=server/CN=user2/name=server/emailAddress=mail@mail.ru
R 321223041103Z 05 unknown /C=RU/ST=Msk/L=Msk/O=MyOrg/OU=server/CN=user3/name=server/emailAddress=mail@mail.ru
V 321223043210Z 06 unknown /C=RU/ST=Msk/L=Msk/O=MyOrg/OU=server/CN=user4/name=server/emailAddress=mail@mail.ru
V 321223045105Z 07 unknown /C=RU/ST=Msk/L=Msk/O=MyOrg/OU=server/CN=user5/name=server/emailAddress=mail@mail.ru

Требуется вывести нумерованный список пользовательских сертификатов (начиная со 2-ой строки, значение CN= до следующего разделителя /), кроме сертификата сервера (это первая строка) и к названию сертификата добавить [ОТОЗВАН], при условии, что первая буква в соответствующей имени сертификата строке, будет R. Если V, то ничего не добавлять к имени. Как это реализовать?
Просто вывести список пользовательских сертификатов получилось так, взяв за основу ваш код:
Код: Выделить весь код
@Echo Off
cls
	>nul Chcp 1251
	
	Set "indextxt=C:\Program Files\OpenVPN\easy-rsa\keys\index.txt"
	Set "word=name"

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

	Set /A i=0

	Echo Введите номер, соответствующий сертификату, который требуется отозвать (Enter - завершение работы):
	Echo.
	For /F "usebackq tokens=13 Skip=3 delims=/=" %%s In (`2^>nul Find /I "%word%" "%indextxt%"`) Do (
		Call Set /A i+=1
		Call Set "@@%%i%%=%%s"
		Call Echo %%i%%. %%s
	)
	)
	If %i%==0 (
	cls
		Echo Пользовательские сертификаты не найдены  &Echo.
		Pause
		Exit /B 1 
	) 

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

Pause
Exit /B 0
В итоге должно получиться так:
Цитата:
Введите номер, соответствующий сертификату, который требуется отозвать (Enter - завершение работы):

1. admin
2. user1
3. user2
4. user3 [ОТОЗВАН]
5. user4
6. user5

N=
и при выборе номера отображалось сообщение:
Цитата:
Вы выбрали %cert_name%
P.S.: powershell прошу не предлагать. крайне желательно именно средствами bat/cmd сделать.

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