|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск в файле и запись в переменную |
|
|
CMD/BAT - [решено] Поиск в файле и запись в переменную
|
Новый участник Сообщения: 46 |
Профиль | Отправить PM | Цитировать Доброго времени суток Уважаемые!
Есть задача: Нужно в файле средствами CMD найти все строки совпадающие с заданным условием поиска в переменной %name% (это текст фамилия или часть названия организации) и ВСЕ найденные строки записать каждую в свою переменную для дальнейшего выбора пользователя нужной переменной (в виде cmd под цифрами 1,2,3 и т.д.) Пользователь выбирает и процесс идет дальше. В принципе к Вам вопрос о том: каким образом записать все найденные варианты в каждый в свою переменную и сделать выбор под цифрами полученных результатов... |
|
Отправлено: 11:15, 25-11-2019 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать 1. на cmd это решается долго, нудно, паскудно. Если есть возможность - лучше смотреть в пошик (обычно такая возможность есть, если нет - аргументы в студию). Вот даже здесь похожая задача решалась.
2. сейчас (а возможно даже уже) в тему заглянет Iska и затребует пример файла, или как минимум задаст вполне справедливые вопросы по кодироке и окончанию строк. |
Последний раз редактировалось Elven, 25-11-2019 в 13:06. Отправлено: 13:01, 25-11-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Очередной вариант создания искусственного интеллекта на CMD
@Echo Off cls >nul Chcp 1251 Set "FileIn=Z:\Box_In\Нужно в файле.txt" Set "name=СоБаКа" If Not Exist "%FileIn%" ( Echo Файл "%FileIn%" не найден. &Echo. Pause Exit /B 2 ) Set /A i=0 Echo Выбирайте номер варианта N (Enter -завершение работы): Echo. For /F "usebackq Skip=2 delims=" %%s In (`2^>nul Find /I "%name%" "%FileIn%"`) Do ( Call Set /A i+=1 Call Set "@@%%i%%=%%s" Call Echo %%i%%= %%s ) If %i%==0 ( Echo Подстрока "%name%" в файле "%FileIn%" не найдена &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 |
------- Последний раз редактировалось megaloman, 25-11-2019 в 16:53. Отправлено: 13:14, 25-11-2019 | #3 |
Новый участник Сообщения: 46
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 14:55, 25-11-2019 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата ownsmir:
Скрытый текст
|
||
Отправлено: 15:04, 25-11-2019 | #5 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата ownsmir:
|
|
------- Отправлено: 16:55, 25-11-2019 | #6 |
Пользователь Сообщения: 90
|
Профиль | Отправить 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 Цитата:
Цитата:
|
||
Отправлено: 22:41, 01-01-2023 | #7 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать @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) Set /A y=0 FOR /F "usebackq skip=1 tokens=1,7 delims=/" %%i In ("%FileIn%") DO ( Set /A y+=1 Set "xx=%%j" Call Set "@@%%y%%=%%xx:~3%%" Echo %%i| >nul 2>nul FindStr /B /I /C:"R"&&Call Set "@@%%y%%=%%xx:~3%% [ОТОЗВАН]" ) If %y% EQU 0 (Echo Пользовательские сертификаты не найдены. &Echo. &Pause &Exit /B 1) 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 |
------- Последний раз редактировалось megaloman, 02-01-2023 в 08:00. Отправлено: 07:51, 02-01-2023 | #8 |
Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать megaloman, еще просьба есть. Возможно ли добавить сюда сортировку по имени в алфавитном порядке?
А так большое спасибо. Код работает отлично! |
Отправлено: 07:05, 09-01-2023 | #9 |
Ветеран Сообщения: 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) Set /A y=0 FOR /F "usebackq skip=1 tokens=1,7 delims=/" %%i In ("%FileIn%") 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 (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 |
------- Отправлено: 17:48, 09-01-2023 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|