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

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

Ответить
Настройки темы
CMD/BAT - [решено] Сравнение строк - ошибка.

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


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

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


Здравствуйте. Помогите пожалуйста.

Есть файл C:\archive\1.txt в котором присутствует следующая строка: Ended : 22 апреля 2021 г. 14:05:46

Есть bat-файл
set stroka=findstr "Ended" D:\archive\1.txt
if /i -%stroka%==-"Ended*" echo "SuschestvuetEnded" > D:\archive\SuschestvuetEnded.txt ELSE D:\archive\NeSuschestvuetEnded.txt

Появляется ошибка "Ended" was unexpected at this time.

Пробовал вот так
set stroka=findstr "Ended" D:\archive\1.txt
if /i -%stroka% NEQ -"*" echo "SuschestvuetEnded" > D:\archive\SuschestvuetEnded.txt ELSE D:\archive\NeSuschestvuetEnded.txt

Все равно появляется ошибка "Ended" was unexpected at this time.

Попробовал чуть-чуть переделать bat-файл
set stroka=findstr "Ended" D:\archive\1.txt
set stroka2=for /f "tokens=1" %i in ('%stroka%') do @echo %i > D:\archive\%i.txt
rem в предыдущей строке я хотел, чтобы в имени файла было значение переменной, то есть, в данном случае - слово Ended
rem но, в дальнейшем, при наборе команды %stroka2% создается файл %i.txt вместо Ended.txt

Скажите пожалуйста, что я не правильно делаю при сравнении строк?
Прокомментируйте пожалуйста каждый из трех вариантов. Укажите пожалуйста на ошибки в каждом из трех примеров.

Отправлено: 09:36, 25-04-2021

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Powershell не рассматривается, или нужно обязательно использовать винтаж?
Код: Выделить весь код
$str1 = (gc D:\temp\123.txt) -match 'ended'
$str2 = "Ended : 23 апреля 2021 г. 14:05:46"
if ($str1 -eq $str2) {
    "Совпадает"
}
else {
    "Не совпадает"
}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

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

Отправлено: 13:16, 29-04-2021 | #11



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

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


Ветеран


Contributor


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

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


epoddubniy, Вы определитесь, что Вам надо: присвоить переменной stroka значение Ended, если в файле присутствует это слово, и нечто другое (например, сделать ее пустой) в противном случае?
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\1.txt"
	Set "KeyWord=Ended"
	
	Set "stroka="
	>nul FindStr /I /C:"%KeyWord%" "%FileIn%" && Set "stroka=%KeyWord%"

	If "%stroka%"=="%KeyWord%" (Echo Ravno) Else (Echo Ne ravno)
pause
Exit /B
или так
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\1.txt"
	Set "KeyWord=Ended"
	
	Set "stroka="
	FOR /F "usebackq delims= " %%s IN ("%FileIn%") DO If "%%s"=="%KeyWord%" Set "stroka=%KeyWord%"

	If "%stroka%"=="%KeyWord%" (Echo Ravno) Else (Echo Ne ravno)
pause
Exit /B

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


Последний раз редактировалось megaloman, 29-04-2021 в 15:44.

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

Отправлено: 15:34, 29-04-2021 | #12


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


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

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


Цитата Foreigner:
Код:
C:\> for /f "tokens=1" %i in ("%stroka%") do @if "%i"=="Ended" echo Ravno »
Спасибо! Как раз, то что мне хотелось реализовать. Получился такой код

Код: Выделить весь код
chcp 65001
set stroka=findstr "Ended" D:\archive\1.txt

:povtor
for /f "tokens=1" %i in ('%stroka%') do @if "%i"=="Ended" (del D:\archive\1.txt & call D:\archive\Otkliu4enieDiska) else goto :povtor
скажите пожалуйста, каким образом сделать цикл,
Код: Выделить весь код
если условие @if "%i"=="Ended" не выполнится, подождать N сек и повторить процедуру: for /f "tokens=1" %i in ('%stroka%') do.... - снова

Цитата DJ Mogarych:
Powershell не рассматривается, или нужно обязательно использовать винтаж? »
Спасибо за код! Но для меня powershell - темный лес. Я новичок, только начал винтаж изучать :-)

Цитата megaloman:
Код:
@Echo Off
cls
Set "FileIn=Z:\Box_In\1.txt"
Set "KeyWord=Ended"
Set "stroka="
FOR /F "usebackq delims= " %%s IN ("%FileIn%") DO If "%%s"=="%KeyWord%" Set "stroka=%KeyWord%"
If "%stroka%"=="%KeyWord%" (Echo Ravno) Else (Echo Ne ravno)
pause
Exit /B »
Спасибо! Сейчас попробую

Цитата megaloman:
Вы определитесь, что Вам надо: присвоить переменной stroka значение Ended, если в файле присутствует это слово, и нечто другое (например, сделать ее пустой) в противном случае? »
Да. Если в файле присутствует это слово, то удалить файл и вызвать другой командный файл через call, а если нет этого слова, то ожидание N сек и снова поиск (повтор процедуры)

Отправлено: 15:45, 29-04-2021 | #13


Ветеран


Contributor


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

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


epoddubniy,
Цикл с ожиданием
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\1.txt"
	Set "KeyWord=Ended"
	Set /A Wait=3
	
	Set "stroka="
	:Begin
		>nul FindStr /I /C:"%KeyWord%" "%FileIn%" && (Set "stroka=%KeyWord%" &GoTo :End)
		TimeOut /T %Wait%
		GoTo :Begin
	:End
	Echo "%stroka%"
pause
Exit /B
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\1.txt"
	Set "KeyWord=Ended"
	Set /A Wait=3
	
	Set "stroka="
	:Begin
		FOR /F "usebackq delims= " %%s IN ("%FileIn%") DO If "%%s"=="%KeyWord%" (Set "stroka=%KeyWord%" &GoTo :End)
		TimeOut /T %Wait%
		GoTo :Begin
	:End
	Echo "%stroka%"
pause
Exit /B
При такой постановке Вам вообще не нужна переменная stroka
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\1.txt"
	Set "KeyWord=Ended"
	Set /A Wait=3
	
	:Begin
		>nul FindStr /I /C:"%KeyWord%" "%FileIn%" && GoTo :End
		TimeOut /T %Wait%
		GoTo :Begin
	:End
	Echo "%KeyWord%"
pause
Exit /B
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\1.txt"
	Set "KeyWord=Ended"
	Set /A Wait=3
	
	:Begin
		FOR /F "usebackq delims= " %%s IN ("%FileIn%") DO If "%%s"=="%KeyWord%" GoTo :End
		TimeOut /T %Wait%
		GoTo :Begin
	:End
	Echo "%KeyWord%"
pause
Exit /B

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

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

Отправлено: 16:14, 29-04-2021 | #14


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Цитата epoddubniy:
Я новичок, только начал винтаж изучать »
Если вы новичок, то изучайте прежде всего современные техники.
Powershell уже 15 лет как существует.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

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

Отправлено: 16:22, 29-04-2021 | #15


Аватара для Fors1k

Старожил


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

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


Цитата epoddubniy:
Я новичок, только начал винтаж изучать »
Верное решение. Я, когда собирался в первый раз в Турцию отправиться на море, тоже сразу понял что я новичок в путешествиях. Самолеты для опытных ребят же, так что я, погнал туда на гужевой повозке. Смекалка меня никогда не подводит

Отправлено: 18:49, 29-04-2021 | #16


Ветеран


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

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


DJ Mogarych, есть подводные камни в виде плохой переносимости по версиям.

Отправлено: 21:40, 29-04-2021 | #17


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


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

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


ВСЕМ СПАСИБО БОЛЬШОЕ ЗА ПОМОЩЬ!

Отправлено: 20:19, 01-05-2021 | #18



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Сравнение строк, а где Like? rudimko Скриптовые языки администрирования Windows 12 08-09-2014 11:34
Сравнение строк в php dimona55 Вебмастеру 3 20-01-2014 20:21
CMD/BAT - [решено] Сравнение строк с переменной и добавление в случае отсутствия zion87 Скриптовые языки администрирования Windows 2 04-01-2013 15:08
сравнение двух массивов строк в Си bool Программирование и базы данных 5 04-05-2005 17:04
Сравнение строк в PHP Dutchman Mihel Вебмастеру 8 06-07-2004 13:04




 
Переход