Показать полную графическую версию : [решено] Ошибка при выполнении батника
Darkar25
08-09-2017, 19:08
При выполнении батника возникает ошибка:Непредвиденное появление: "...я пытался убрать этот символ...как и ожидалось ничего хорошего из этого не вышло...батник начал просто закрываться...
суть проблемы ниже...это отдельный батник где я тестировал скрипт помещения определенной строки в переменную и проверки её на наличие вопроса...систему вывода ответа не буду прикреплять ибо она не относится к теме...
Суть батника:попытка написать батник который "Отвечает" на вопросы
Проблема:Описана выше
Батник:@echo off
set num=-1
set/p "Question="
:start1
set num+=1
for /f "delims= skip=%num%" %%i in (123.txt) do (
set STR=%%i
echo %STR% |findstr /C:%Question% >nul &&echo Yes ||goto start1
)
:exitFor
echo %STR%
pause
Скриншоты:
Батник: »
Обрамляйте код тэгом «code». И лишь затем, если код слишком велик, его можно обернуть и в «spoiler».
Примерно так:
@echo off
setlocal enableextensions enabledelayedexpansion
set /a num = -1
set /p Question=
:Repeat
set /a num += 1
for /f "delims= skip=%num%" %%i in ("123.txt") do (
set STR=%%i
echo !STR! | >nul findstr.exe /с:%Question% && echo Yes || goto :Repeat
)
echo %STR%
endlocal
exit /b 0
Поскольку проверять не на чем — не проверялось. Но толку в таком виде всё равно не будет: Вы не можете указывать «skip=0». Именно отсюда ошибка:
Непредвиденное появление: ".
Darkar25
08-09-2017, 20:54
хорошо,ошибка пропала...но появилась новая проблема...теперь не высвечивается проверка работоспособности скрипта...т.е.не высвечивается переменная которая должна была задаться...точнее...она высвечивается но не меняется...я добавил одну строчку в батник...строчка выставляет переменную STR на 0...во время того как должна высветиться проверочная строка с уже нужной строкой высвечивается 0...есть возможные варианты решения проблемы?
дополнение:вывел проверку строки на наличие введенного текста за пределы скрипта поиска строки и мне начало спамить в командную строку данное сообщение:
Ошибка в командной строке
/c пропускается
дополнение:я ЧАСТИЧНО(переменная всё еще не меняется) решил эту проблему...заменив маленькую(предположительно русскую) с на большую англ C и эта ошибка пропала...но теперь он не ищет текст...просто стоит пустая строка и всё...атрибут UseBackQ частично решает эту проблему...но теперь считывается только последняя строка...и если не ввести текст который содержит строка то оно будет вечно крутить по кругу эту строку
-------
короче...вот вам описание моей ситуации...:
было 33 весёлых бага программист пофиксил 1 баг стало 133 весёлых бага
Darkar25
08-09-2017, 23:23
Проблема решена!Финальный код:
@echo off
setlocal enableextensions enabledelayedexpansion
set /a "NUM=0"
set /a "STR=0"
set /p "Question="
:Repeat
set /a NUM+=1
set /a c=0
for /f "UseBackQ Delims=" %%A IN ("123.txt") do (
set /a c+=1
if !c!==%NUM% set "STR=%%A"
)
echo.!STR!
echo.!STR! | >nul findstr.exe /C:%Question% && echo Yes || goto :Repeat
endlocal
pause
exit /b 0
Darkar25,
когда-то чтобы обойти Вы не можете указывать «skip=0» »
(а бывает, действительно, что условие переменной задается чем-то извне)
придумал сделать так:
@echo off
set n=0
:: Пропустить одну строку
:: set n=1
if %n% gtr 0 set "x=skip=%n%"
for /f "%x% usebackq delims=" %%a in ("file.txt") do echo %%a
pause
alpap, можно «more +N», тут «0» допустим.
https://i.imgur.com/Ozuyz5k.png
Iska,
как раз именно так и поступал в дальнейшем, так короче, а поначалу что в голову пришло, то и использовал, но тоже вариант.
alpap, я, кстати, когда-то наступал ровно на те же грабли с вариантом skip=0.
Darkar25,
кстати
Финальный код: »
ой ли!
например, кусок из вашего кода (он именно так у вас записан, я просто сократил):
@echo off
set /p "Question="
echo %Question%|findstr.exe /C:%Question%
pause
теперь попробуйте ввести при запросе сначала
[Текст_без_пробела]
а второй раз
[Текст с пробелом]
думаю будет неожиданно.
Darkar25
09-09-2017, 21:43
Darkar25,
кстати
Цитата Darkar25:
Финальный код: »
ой ли!
например, кусок из вашего кода (он именно так у вас записан, я просто сократил):
Код:
@echo off
set /p "Question="
echo %Question%|findstr.exe /C:%Question%
pause
теперь попробуйте ввести при запросе сначала
[Текст_без_пробела]
а второй раз
[Текст с пробелом]
думаю будет неожиданно. »
ну...да...есть такое...уже есть соседняя тема)))
http://forum.oszone.net/thread-329656.html
заметил эту проблему когда писал бд для батника а не когда вы это сообщение написали)))
надо так:
findstr.exe /C:"%Question%"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.