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

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

Ответить
Настройки темы
CMD/BAT - [решено] Наличие текста с условиями

Новый участник


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

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


Изменения
Автор: POSTREALITY
Дата: 20-05-2016
Описание: Включил уведомление по e-mail
Друзья, здравствуйте.
Помогите пожалуйста, сам не могу сообразить.
Необходимо написать код с следующими условиями:
Есть текстовый файл Q:\TesT.txt, необходимо читать этот файл и если в нём есть текст "CLIENT_CODE", то - GOTO :1, а если данного текста в этом файле нет то GOTO :2
Подскажите пожалуйста, вообще не могу понять как это сделать.
Спасибо!

Отправлено: 15:58, 20-05-2016

 

Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo off
cls

findstr /I /C:CLIENT_CODE Q:\TesT.txt >nul

If %Errorlevel%==0 (
	Echo Yes
) Else (
	Echo No
)	


pause
Если делать дословно, как Вы требуете (мне GoTo не нравится), то можно так

Код: Выделить весь код
@Echo off
cls

findstr /I /C:CLIENT_CODE Q:\TesT.txt >nul
If %Errorlevel%==0 GoTo :1
GoTo :2

:1
Echo Yes
GoTo :Eof

:2
Echo No
GoTo :Eof
Либо вместо If
Код: Выделить весь код
findstr /I /C:CLIENT_CODE Q:\TesT.txt >nul&&GoTo :1
GoTo :2
ИМХО, GoTo :2 и вовсе не нужно, можно написать со следующей строки код, который Вы хотите написать после метки :2, после GoTo :1
Код: Выделить весь код
@Echo off
cls
findstr /I /C:CLIENT_CODE Q:\TesT.txt >nul&&GoTo :1
:2
Echo No
GoTo :Eof
:1
Echo Yes
GoTo :Eof


-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 20-05-2016 в 16:38.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:13, 20-05-2016 | #2



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

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


Ветеран


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

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


Или так:
Код: Выделить весь код
@echo off
<"file.txt">nul findstr/ic:"CLIENT_CODE" && call :p1 || call :p2
pause>nul

:p1
 echo:Есть такой текст
exit/b

:p2
 echo:Нет такого текста
exit/b
.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:13, 20-05-2016 | #3


Новый участник


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

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


Цитата megaloman:
findstr /I /C:CLIENT_CODE Q:\TesT.txt >nul If %Errorlevel%==0 ( Echo Yes ) Else ( Echo No ) »
Цитата alpap:
<"file.txt">nul findstr/ic:"CLIENT_CODE" && call :p1 || call :p2 pause>nul :p1 echo:Есть такой текст exit/b :p2 echo:Нет такого текста exit/b »
Ещё больше запутался )))
Тут дело в том, что я полностью запутался в последовательностях

Есть вот такой код:
Код: Выделить весь код
findstr /I /C:CLIENT_CODE Q:\error.lim >nul
ТУТ ВАШИ ОТВЕТЫ НА МОЙ ПЕРВЫЙ ВОПРОС

if exist Q:\error.lim (
mailsend1.18.exe *** При выгрузке произошли ошибки  ***
) else (
mailsend1.18.exe *** При выгрузке всё ОК ***
)

if exist Q:\error.lim (
move /Y Q:\error.lim Q:\error\ && rename "Q:\error\error.lim" %FD%_error-FORTS.lim%R%
) else (
goto :FRMB
)
ERROR.LIM это простой текстовик

И смысл в том, чтобы эта схема работала по следующей последовательности:
1) Смотрим, существует ли на диске Q файл error.lim
1.1) Если файл есть, переходим к пункту 2
1.2) Если файла нет, то переходим к метке :FRMB

2) Читаем файл и ищем в нём строку "CLIENT_CODE"
2.1) Если строчка есть то переходим к пункту 3
2.2) Если строчки нет, то УДАЛЯЕМ ФАЙЛ, Отправляем почту *** При выгрузке всё ОК *** и переходим к той-же метке :FRMB

3) Отправляем почту *** При выгрузке произошли ошибки ***, перемещаем файл в директорию Q:\error\ и переименовываем файл под необходимое имя, после всего переходим к той-же метке :FRMB

И вот в данном, конкретном моменте я заблудился, не могу понять, как правильно составить последовательность кода. Почта отправляется, файл перемещается и переименовывается, но последовательность нарушена, по этому программа работает не правильно.

Огромное спасибо за помощь!

Отправлено: 17:59, 20-05-2016 | #4


Ветеран


Contributor


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

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


На ваш код не смотрю, смотрю ваше описание алгоритма и последовательно его переписываю - не надо путаться, надо как в белорусском языке - как слышится, так и пишется :-)
Код: Выделить весь код
@Echo off
cls

Set "ErrorLim=Q:\Error.lim"
Set "Code=CLIENT_CODE"
Set "ErrDir=Q:\Error"

SetLocal EnableExtensions EnableDelayedExpansion

If Exist "%ErrorLim%" (
	findstr /I /C:"%Code%" "%ErrorLim%" >nul
	If !Errorlevel!==0 (
		Move "%ErrorLim%" "%ErrDir%\%Date%_%Time::=%_error-FORTS.lim" >nul
		Echo mailsend1.18.exe *** При выгрузке произошли ошибки  ***
	) Else (
		Del "%ErrorLim%"
		Echo mailsend1.18.exe *** При выгрузке всё ОК ***
	)
) 
:FRMB

pause
Метка :FRMB абсолютно не нужна, написал только потому, что она помянута в постановке.
Программы mailsend1.18.exe у меня естественно нет, для отладки поставил на эту строку Echo, чтобы видеть что происходит. Вы Echo уберёте. Как и pause.
Я не знаю, что такое %FD%_error-FORTS.lim%R%, поэтому заменил на имя с датой и временем при переносе-переименовании.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 20-05-2016 в 21:06.


Отправлено: 21:00, 20-05-2016 | #5


Ветеран


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

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


Код: Выделить весь код
@echo off
if exist "Q:\error.lim" <"Q:\error.lim">nul findstr/ic:"CLIENT_CODE" && call :p1 || call :p2
:FRMB
 echo:Продолжение основной программы
exit

:p1
 echo:Отправляем почту *** При выгрузке произошли ошибки ***,& goto FRMB
exit/b

:p2
 echo:УДАЛЯЕМ ФАЙЛ, Отправляем почту *** При выгрузке всё ОК ***,& goto FRMB
exit/b
.

Даже по сути и "& goto FRMB" не нужно, мы и так будем возвращаться в эту строку ":FRMB", которая тоже не нужна.

Последний раз редактировалось alpap, 20-05-2016 в 21:20.


Отправлено: 21:13, 20-05-2016 | #6


Новый участник


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

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


Цитата megaloman:
На ваш код не смотрю, смотрю ваше описание алгоритма и последовательно его переписываю - не надо путаться, надо как в белорусском языке - как слышится, так и пишется :-) »
Скажите пожалуйста, а есть ли вариант обойтись без !Errorlevel!, а точнее без EnableDelayedExpansion? Он наглухо рубит работу mailsend. :-(
Спасибо

Цитата alpap:
Даже по сути и "& goto FRMB" не нужно, мы и так будем возвращаться в эту строку ":FRMB", которая тоже не нужна. »
Спасибо за помощь, но к сожалению, Ваш вариант не совсем подходит логически. Дело в том, что файл error.lim должен обрабатываться три раза в основной программе, точнее, за цикл одной программы создаётся и обрабатывается три разных файла error.lim, по этому откладывать его обработку и удаление на конец программы нельзя, так как схема должна быть чётко следующая: ПЕРВЫЙ ТРИЦИКЛ: если файл есть и соответствует условиям - перемещаем, сообщаем, если нет - удаляем, сообщаем.
ВТОРОЙ ТРИЦИКЛ: если файл есть и соответствует условиям - перемещаем, сообщаем, если нет - удаляем, сообщаем.
ТРЕТИЙ ТРИЦИКЛ: если файл есть и соответствует условиям - перемещаем, сообщаем, если нет - удаляем, сообщаем.
Если данную логику не соблюдать, то файлы error.lim будут конфликтовать друг с другом.

Отправлено: 20:59, 25-05-2016 | #7


Ветеран


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

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


POSTREALITY,
Все в точности так и происходит, поставьте в подпрограммы свои нужные команды и убедитесь в этом.

Отправлено: 22:10, 25-05-2016 | #8


Ветеран


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

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


Цитата alpap:
Или так: »
Там не хватает «exit /b» после «pause».


Цитата POSTREALITY:
Он наглухо рубит работу mailsend. :-( »
Чего-чего-чего?!

Отправлено: 07:25, 26-05-2016 | #9


Ветеран


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

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


Цитата Iska:
Там не хватает «exit /b» после «pause». »
то сырой еще был, в п5 почти конечный, & goto FRMB надо убрать и :FRMB, за ненадобностью.

Отправлено: 09:58, 26-05-2016 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] проверка наличие определенного текста в файлах shmel_sv@vk Скриптовые языки администрирования Windows 11 15-07-2015 11:15
CMD/BAT - Удаление папок с условиями Bukinozoid Скриптовые языки администрирования Windows 2 30-05-2012 22:31
CMD/BAT - Как проверить наличие текста в файле mamont1 Скриптовые языки администрирования Windows 6 16-09-2010 16:32
CMD/BAT - Проверка на наличие какого-то текста Magniy Скриптовые языки администрирования Windows 4 20-04-2010 18:26




 
Переход