Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Ошибка при выполнении батника (http://forum.oszone.net/showthread.php?t=329650)

Darkar25 08-09-2017 19:08 2763672

Ошибка при выполнении батника
 
Вложений: 2
При выполнении батника возникает ошибка:Непредвиденное появление: "...я пытался убрать этот символ...как и ожидалось ничего хорошего из этого не вышло...батник начал просто закрываться...
суть проблемы ниже...это отдельный батник где я тестировал скрипт помещения определенной строки в переменную и проверки её на наличие вопроса...систему вывода ответа не буду прикреплять ибо она не относится к теме...
Суть батника:попытка написать батник который "Отвечает" на вопросы
Проблема:Описана выше
Батник:
Код:

@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

Скриншоты:

Iska 08-09-2017 20:39 2763696

Цитата:

Цитата Darkar25
Батник: »

Обрамляйте код тэгом «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 2763703

хорошо,ошибка пропала...но появилась новая проблема...теперь не высвечивается проверка работоспособности скрипта...т.е.не высвечивается переменная которая должна была задаться...точнее...она высвечивается но не меняется...я добавил одну строчку в батник...строчка выставляет переменную STR на 0...во время того как должна высветиться проверочная строка с уже нужной строкой высвечивается 0...есть возможные варианты решения проблемы?
дополнение:вывел проверку строки на наличие введенного текста за пределы скрипта поиска строки и мне начало спамить в командную строку данное сообщение:
Ошибка в командной строке
/c пропускается
дополнение:я ЧАСТИЧНО(переменная всё еще не меняется) решил эту проблему...заменив маленькую(предположительно русскую) с на большую англ C и эта ошибка пропала...но теперь он не ищет текст...просто стоит пустая строка и всё...атрибут UseBackQ частично решает эту проблему...но теперь считывается только последняя строка...и если не ввести текст который содержит строка то оно будет вечно крутить по кругу эту строку
-------
короче...вот вам описание моей ситуации...:
было 33 весёлых бага программист пофиксил 1 баг стало 133 весёлых бага

Darkar25 08-09-2017 23:23 2763724

Проблема решена!Финальный код:
Код:

@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


alpap 09-09-2017 01:02 2763731

Darkar25,
когда-то чтобы обойти
Цитата:

Цитата Iska
Вы не можете указывать «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


Iska 09-09-2017 01:37 2763734

alpap, можно «more +N», тут «0» допустим.


alpap 09-09-2017 05:23 2763740

Iska,
как раз именно так и поступал в дальнейшем, так короче, а поначалу что в голову пришло, то и использовал, но тоже вариант.

Iska 09-09-2017 09:10 2763747

alpap, я, кстати, когда-то наступал ровно на те же грабли с вариантом skip=0.

alpap 09-09-2017 18:36 2763805

Darkar25,
кстати
Цитата:

Цитата Darkar25
Финальный код: »

ой ли!

например, кусок из вашего кода (он именно так у вас записан, я просто сократил):
Код:

@echo off
set /p "Question="
echo %Question%|findstr.exe /C:%Question%
pause

теперь попробуйте ввести при запросе сначала
[Текст_без_пробела]
а второй раз
[Текст с пробелом]
думаю будет неожиданно.

Darkar25 09-09-2017 21:43 2763823

Цитата:

Цитата alpap
Darkar25,
кстати
Цитата Darkar25:
Финальный код: »
ой ли!
например, кусок из вашего кода (он именно так у вас записан, я просто сократил):
Код:
@echo off
set /p "Question="
echo %Question%|findstr.exe /C:%Question%
pause
теперь попробуйте ввести при запросе сначала
[Текст_без_пробела]
а второй раз
[Текст с пробелом]
думаю будет неожиданно. »

ну...да...есть такое...уже есть соседняя тема)))
http://forum.oszone.net/thread-329656.html
заметил эту проблему когда писал бд для батника а не когда вы это сообщение написали)))

alpap 09-09-2017 22:18 2763829

надо так:
Код:

findstr.exe /C:"%Question%"


Время: 22:51.

Время: 22:51.
© OSzone.net 2001-