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=
|
и при выборе номера отображалось сообщение:
P.S.: powershell прошу не предлагать. крайне желательно именно средствами bat/cmd сделать.