|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Проверка наличия нескольких строк в файле |
|
|
CMD/BAT - Проверка наличия нескольких строк в файле
|
Пользователь Сообщения: 90 |
Профиль | Отправить PM | Цитировать Задача следующая. Если есть файл, например, MBP*.din, то проверить baselist.cfg на наличие строк (ROS, BRB, BVV, BVS, PKP, PKS и может быть еще около десятка). Если же строка начинается с ; то ее игнорировать. Если же в baselist.cfg отсутствует какая-то строка, то записать в файл proverka.txt все отсутствующие строки (Отсутствует: %название_строки%). Помогите как это реализовать
|
|
Отправлено: 00:58, 31-08-2014 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Упакуйте в архив образец файла «baselist.cfg» и выложите.
|
Отправлено: 01:07, 31-08-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать Iska, baselist.zip ну вот собс-но и содержимое
Проверяем этот файл на наличие строк (ROS, BRB, BVV, BVS, BZS, PKP, PKS, PDR). По итогам проверки должен выдать, что BVS и PDR отсутствуют (т.к. в начале стоит ; ), а также отсутствует BZS. Другие строки игнорируем (тот же LAW) |
Отправлено: 01:19, 31-08-2014 | #3 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать |
Отправлено: 06:39, 31-08-2014 | #4 |
Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать Georgio, спасибо. работает. Но возник еще один вопрос. Таких вот *.din-файлов может быть около 100 штук. И для каждого din определенный список баз (которые должны быть в baselist.cfg). Можно конечно же 100 раз написать конструкцию if exist... , но может как-то можно оптимизировать код?
Например задав сначала: set MBP*.din=ROS, BRB, BVV, BVS, BZS, PKP, PKS, PDR set LAW*.din=LAW, DOF set PAP*.din=PAP и т.д. а после использовать одну конструкцию типа: если есть такой-то дин,то ищем соответствия в baselist.cfg |
|
Последний раз редактировалось V!RTuE, 31-08-2014 в 17:50. Отправлено: 17:13, 31-08-2014 | #5 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать @echo off& ::Команда "echo off" обязательна! set $MBP*.din=ROS, BRB, BVV, BVS, BZS, PKP, PKS, PDR set $LAW*.din=LAW, DOF set $PAP*.din=PAP ::::::::::::::::::::::и т.д.::::::::::::::::::::::: ( for /f "tokens=1,2 delims=$=" %%i in (' set $ ') do ( if exist "%%i" ( for %%k in (%%j) do ( findstr /ilx %%k "baselist.cfg">nul|| ( echo Отсутствует: %%k ) ) ) ) )>"proverka.txt" exit /b |
Отправлено: 18:50, 31-08-2014 | #6 |
Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать Появился еще один вопрос. как, например, в этой строке кода
добавить условие для строки ROS. Т.е. проверить есть ли ROS или LAW. Т.е. если есть ROS, но нет LAW, то всё ок. И если есть LAW, но нет ROS, то тоже всё ок. А если нет ни ROS, ни LAW, то записать в файл "Отсутствует: ROS или LAW" так не работает: |
Последний раз редактировалось V!RTuE, 01-09-2014 в 05:34. Отправлено: 05:08, 01-09-2014 | #7 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата V!RTuE:
Я понял, что Вы имели в виду: "А если нет ни ROS, ни LAW, то записать в файл "Отсутствуют: ROS и LAW"". Цитата V!RTuE:
Цитата Georgio:
@echo off& ::Команда "echo off" обязательна! set $MBP*.din="ROS и LAW", BRB, BVV, BVS, BZS, PKP, PKS, PDR set $LAW*.din=LAW, DOF set $PAP*.din=PAP ::::::::::::::::::::::и т.д.::::::::::::::::::::::: ( for /f "tokens=1,2 delims=$=" %%i in (' set $ ') do ( if exist "%%i" ( for %%k in (%%j) do ( findstr /bil %%k "baselist.cfg">nul|| ( echo Отсутствуют: %%~k ) ) ) ) )>"proverka.txt" exit /b |
|||
Последний раз редактировалось Georgio, 01-09-2014 в 09:25. Отправлено: 07:41, 01-09-2014 | #8 |
Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать Georgio, спасибо, вы МЕГАМОЗГ!
еще появился вопрос. бывает, что названия din начинаются одинаково, например и в случае если есть только MEDR*.din (для него нужна запись в baselist.cfg только MEDR), то выдаст сообщение что не хватает еще MED. Может есть способ чтобы вместо * (которая заменяет любой символ), поставить знак, заменяющий только цифры)? т.к. всегда после названия идут только цифры. Пока что придумал такой способ решения |
Последний раз редактировалось V!RTuE, 03-09-2014 в 01:45. Отправлено: 01:38, 03-09-2014 | #9 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата V!RTuE:
@echo off& ::Команда "echo off" обязательна! set $MBP*.din="ROS и LAW", BRB, BVV, BVS, BZS, PKP, PKS, PDR set $LAW*.din=LAW, DOF set $PAP*.din=PAP set $MED*.din=MED set $MEDR*.din=MEDR ::::::::::::::::::::::и т.д.::::::::::::::::::::::: ( for /f "tokens=1,2,3 delims=$*=" %%h in (' set $ ') do ( dir /a-d/b "%%h*%%i"| findstr /eir "%%h[0-9]*\%%i">nul&& ( for %%k in (%%j) do ( findstr /bil %%k "baselist.cfg"| findstr /eil %%k>nul|| ( echo Отсутствуют: %%~k ) ) ) ) )>"proverka.txt" exit /b |
|
Отправлено: 10:04, 03-09-2014 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Проверка наличия параметров | GhostKU | Скриптовые языки администрирования Windows | 6 | 29-07-2017 23:53 | |
CMD/BAT - проверка наличия файлов | neprotiv | Скриптовые языки администрирования Windows | 0 | 04-04-2013 22:09 | |
CMD/BAT - Замена нескольких строк в файле | bcubbs@fb | Скриптовые языки администрирования Windows | 3 | 24-01-2013 14:01 | |
CMD/BAT - [решено] Проверка наличия процесса | BUSTED | Скриптовые языки администрирования Windows | 7 | 26-08-2012 19:28 | |
Любой язык - [решено] Проверка наличия обновления | SANIOK_AV | Скриптовые языки администрирования Windows | 4 | 18-08-2011 14:47 |
|