|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск в файле и запись в переменную |
|
CMD/BAT - [решено] Поиск в файле и запись в переменную
|
Новый участник Сообщения: 46 |
Профиль | Отправить PM | Цитировать Доброго времени суток Уважаемые!
Есть задача: Нужно в файле средствами CMD найти все строки совпадающие с заданным условием поиска в переменной %name% (это текст фамилия или часть названия организации) и ВСЕ найденные строки записать каждую в свою переменную для дальнейшего выбора пользователя нужной переменной (в виде cmd под цифрами 1,2,3 и т.д.) Пользователь выбирает и процесс идет дальше. В принципе к Вам вопрос о том: каким образом записать все найденные варианты в каждый в свою переменную и сделать выбор под цифрами полученных результатов... |
|
Отправлено: 11:15, 25-11-2019 |
Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать megaloman, если в искомом файле нет записей о клиентских сертификатах, то появляется надпись:
Цитата:
В остальном всё прекрасно работает |
|
Отправлено: 23:15, 09-01-2023 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать Разобрался вроде.
Добавил в начале: и далее добавил проверку: Полностью код выглядит у меня так: :: Показать список клиентов 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 |
Ветеран Сообщения: 2728
|
Профиль | Отправить 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 |
Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать megaloman, всё-равно появляется ошибка. Так как у меня в 2 местах подобный скрипт используется. Первое - это когда надо отозвать сертификат, то там при не нахождении искомой записи скрипт должен завершить работу (точнее вернуться в предыдущий пункт меню).
И второй случай это при создании нового сертификата у меня показывается нумерованный список уже имеющихся, но не без необходимости с ними что-либо делать. Эту часть кода я убрал: Скрытый текст
поэтому если и не найдено записей, то я решил, что проще пропустить часть кода, сделав соответствующую метку и перейдя сразу к ней. Ну и надо учитывать, что не закрывая скрипт может потребоваться несколько раз выполнять этот код. и могут как присутствовать записи о сертификатах, так и нет. Чтобы не принимало %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. Вот результат:
Цитата:
P.S.: Опубликовал полностью свой проект OpenVPN-All-in-One - Скрипт,облегчающий создание серверной и клиентской части OpenVPN Если будет желание и время разобраться, то прошу ознакомиться. Лучше там продолжить обсуждение. |
|
Последний раз редактировалось V!RTuE, 11-01-2023 в 00:59. Отправлено: 14:41, 10-01-2023 | #14 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|