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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Проверка наличия нескольких строк в файле

Ответить
Настройки темы
CMD/BAT - Проверка наличия нескольких строк в файле

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

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


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

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


Задача следующая. Если есть файл, например, MBP*.din, то проверить baselist.cfg на наличие строк (ROS, BRB, BVV, BVS, PKP, PKS и может быть еще около десятка). Если же строка начинается с ; то ее игнорировать. Если же в baselist.cfg отсутствует какая-то строка, то записать в файл proverka.txt все отсутствующие строки (Отсутствует: %название_строки%). Помогите как это реализовать

Отправлено: 00:58, 31-08-2014

 

Ветеран


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

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


Упакуйте в архив образец файла «baselist.cfg» и выложите.

Отправлено: 01:07, 31-08-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


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

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


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

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



Iska, baselist.zip ну вот собс-но и содержимое
Код: Выделить весь код
ROS
BRB
BVV
;BVS
PKP
PKS
;PDR
LAW
Проверяем этот файл на наличие строк (ROS, BRB, BVV, BVS, BZS, PKP, PKS, PDR). По итогам проверки должен выдать, что BVS и PDR отсутствуют (т.к. в начале стоит ; ), а также отсутствует BZS. Другие строки игнорируем (тот же LAW)

Отправлено: 01:19, 31-08-2014 | #3


Ветеран


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

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


Код: Выделить весь код
@echo off
if exist "MBP*.din" (
 for %%i in (ROS, BRB, BVV, BVS, BZS, PKP, PKS, PDR) do (
  findstr /ilx %%i "baselist.cfg">nul|| (
  echo Отсутствует: %%i
  )
  )
 )>"proverka.txt"
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:39, 31-08-2014 | #4


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

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


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

Профиль | Отправить 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
и т.д.
т.е. завести в переменные каждый din и соответствующие ему базы в baselist.cfg
а после использовать одну конструкцию типа: если есть такой-то дин,то ищем соответствия в baselist.cfg

Последний раз редактировалось V!RTuE, 31-08-2014 в 17:50.


Отправлено: 17:13, 31-08-2014 | #5


Ветеран


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

Профиль | Отправить 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


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

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


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

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


Появился еще один вопрос. как, например, в этой строке кода
Код: Выделить весь код
set $MBP*.din=ROS, BRB, BVV, BVS, BZS, PKP, PKS, PDR
добавить условие для строки ROS. Т.е. проверить есть ли ROS или LAW. Т.е. если есть ROS, но нет LAW, то всё ок. И если есть LAW, но нет ROS, то тоже всё ок. А если нет ни ROS, ни LAW, то записать в файл "Отсутствует: ROS или LAW"
так не работает:
Код: Выделить весь код
set $MBP*.din=ROS LAW, BRB, BVV, BVS, BZS, PKP, PKS, PDR

Последний раз редактировалось V!RTuE, 01-09-2014 в 05:34.


Отправлено: 05:08, 01-09-2014 | #7


Ветеран


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

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


Цитата V!RTuE:
А если нет ни ROS, ни LAW, то записать в файл "Отсутствует: ROS или LAW" »

Я понял, что Вы имели в виду: "А если нет ни ROS, ни LAW, то записать в файл "Отсутствуют: ROS и LAW"".



Цитата V!RTuE:
проверить есть ли ROS или LAW. Т.е. если есть ROS, но нет LAW, то всё ок. И если есть LAW, но нет ROS, то тоже всё ок »
Цитата Georgio:
А если нет ни ROS, ни LAW, то записать в файл "Отсутствуют: ROS и LAW" »

Код: Выделить весь код
@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


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

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


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

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


Georgio, спасибо, вы МЕГАМОЗГ!
еще появился вопрос. бывает, что названия din начинаются одинаково, например
Код: Выделить весь код
set $%DIN%MED*.din=MED
set $%DIN%MEDR*.din="MEDR или MED"
и в случае если есть только MEDR*.din (для него нужна запись в baselist.cfg только MEDR), то выдаст сообщение что не хватает еще MED. Может есть способ чтобы вместо * (которая заменяет любой символ), поставить знак, заменяющий только цифры)? т.к. всегда после названия идут только цифры. Пока что придумал такой способ решения
Код: Выделить весь код
set $%DIN%MED0*.din=MED
set $%DIN%MED1*.din=MED
set $%DIN%MED2*.din=MED
set $%DIN%MED3*.din=MED
set $%DIN%MED4*.din=MED
set $%DIN%MED5*.din=MED
set $%DIN%MED6*.din=MED
set $%DIN%MED7*.din=MED
set $%DIN%MED8*.din=MED
set $%DIN%MED9*.din=MED
set $%DIN%MEDR*.din="MEDR или MED"

Последний раз редактировалось V!RTuE, 03-09-2014 в 01:45.


Отправлено: 01:38, 03-09-2014 | #9


Ветеран


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

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Проверка наличия нескольких строк в файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход