![]() |
Сравнение строк - ошибка.
Здравствуйте. Помогите пожалуйста.
Есть файл 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 Скажите пожалуйста, что я не правильно делаю при сравнении строк? Прокомментируйте пожалуйста каждый из трех вариантов. Укажите пожалуйста на ошибки в каждом из трех примеров. |
|
epoddubniy,
Цитата:
Что Вы хотите видеть в переменной %stroka% и что реально имеете? Код:
set stroka=findstr "Ended" D:\archive\1.txt Решение
Код:
@Echo Off |
Код:
chcp 65001 Цитата:
|
|
Цитата:
Цитата:
Возможно, Вы несколько раз запустите скрипт, и, возможно, ранее этот файл уже был создан. Чтобы не получилось двусмысленности, сначала файл удалим: Del "%FileNo%, а если его и не было, чтобы сообщение об ошибке не выскакивало на экран, направим его в пустоту 2>nul |
объясните пожалуйста еще один момент. Если я ввожу в командной строке
c:\users\admin>set stroka=findstr "Ended" D:\archive\1.txt c:\users\admin>echo %stroka% Ended : 22 апреля 2021 г. 14:05:46 c:\users\admin>set stroka2=for /f "tokens=1" %i in ('%stroka%') do @echo %i c:\users\admin>echo %stroka2% Ended c:\users\admin>if "%stroka2%"=="Ended" echo Ravno Непредвиденное появление: =1" %i in ('findstr "Ended" D:\archive\1.txt') do @echo %i"=="Ended". c:\users\admin>if "Ended"=="Ended" echo Ravno Ravno Не пойму почему при вводе if "Ended"=="Ended" echo Ravno получаю вывод Ravno, а при вводе if "%stroka2%"=="Ended" echo Ravno "Непредвиденное появление...", ведь если ввести echo %stroka2%, то там же четко выводится Ended, то есть "%stroka2%"=="Ended" это же одно и то же что и "Ended"=="Ended" (или я что-то не понимаю...) Помогите пожалуйста понять, разобраться, Iska, megaloman! |
Вложений: 1
Цитата:
Это что-то из разряда фантастики.
Как Вы изобразили, нельзя переменной так в лоб присвоить результат выполнения команды. Я повторил в командном окне Ваши кунштюки и получил ожидаемый результат в скриншоте. Переменная
%stroka% в Echo раскрывается в строку findstr "Ended" D:\archive\1.txt а применённая как команда - вызывает исполнение команды. Вся беда в том, что есть определённые правила написания командных файлов, правила дорожного движения, законы природы, и изобретать свои - увлекательно, но контрпродуктивно. Попробуйте: Код:
If 1 2 3==1 2 3 Echo kuku Код:
Непредвиденное появление: 2. If строка1==строка2 действие В этом примере строка1 это 1, далее нет операции == и зачем-то появляется 2, что с синтаксисом If не вяжется. Корректно написать Код:
If "1 2 3"=="1 2 3" Echo kuku |
Цитата:
то есть Код:
if "%stroka2%"=="Ended" echo Ravno Код:
if "for /f "tokens=1" %i in ('%stroka%') do @echo %i"=="Ended" echo Ravno Код:
"for /f "tokens Цитата:
Или это не возможно и я, по незнанию, пытаюсь изобрести что-то. |
Цитата:
Код:
C:\> for /f "tokens=1" %i in ("%stroka%") do @if "%i"=="Ended" echo Ravno |
Powershell не рассматривается, или нужно обязательно использовать винтаж?
Код:
$str1 = (gc D:\temp\123.txt) -match 'ended' |
epoddubniy, Вы определитесь, что Вам надо: присвоить переменной stroka значение Ended, если в файле присутствует это слово, и нечто другое (например, сделать ее пустой) в противном случае?
Код:
@Echo Off Код:
@Echo Off |
Цитата:
Код:
chcp 65001 Код:
если условие @if "%i"=="Ended" не выполнится, подождать N сек и повторить процедуру: for /f "tokens=1" %i in ('%stroka%') do.... - снова Цитата:
Цитата:
Цитата:
|
epoddubniy,
Цикл с ожиданием
Код:
@Echo Off Код:
@Echo Off При такой постановке Вам вообще не нужна переменная stroka
Код:
@Echo Off Код:
@Echo Off |
Цитата:
Powershell уже 15 лет как существует. |
Цитата:
|
DJ Mogarych, есть подводные камни в виде плохой переносимости по версиям.
|
ВСЕМ СПАСИБО БОЛЬШОЕ ЗА ПОМОЩЬ!
|
Время: 21:26. |
Время: 21:26.
© OSzone.net 2001-