Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2011, 11:30   #1
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
Радость Проблема с переходом (bat)

Это опять я, с прошлой проблемой уже разобрался, но, возникла новая проблема, надо проверять если есть файл, то переносить на строку такую-то, а если нету файла, то переносить на строку другую-то, но тут возникла проблема, а именно - если ставить переход goto, то она блокирует то что будешь дальше, и сразу переносит на другую строку. Помогите решить проблему, весь код файла
Код:
@echo off
title Тестовый файл
echo Тестовый файл
:LAUNCH
echo.
echo 1) Запустить файл
echo 2) О программе
echo 3) Выход
echo.
set /P l="Введите номер действия: " 

IF %l%==1 ( echo. 
:ERROR
echo Список файлов:
echo.
DIR /B "%CD%"
echo.
set /P d="Введите наименование файла: " 
goto OVER
:LISTING
echo проверка

)

IF %l%==2 ( echo.
echo /////////////////////////////
echo /// бла-бла-бла           ///
echo /// бла-бла-бла           ///
echo /////////////////////////////
goto LAUNCH
)

IF %l%==3 (echo. 
exit
)

:OVER
if not exist %d% echo Файла "%d%" не существует
goto ERROR
if exist %d% goto LISTING


Pause
а эта часть которая должна отвечать за проверку файла на существование

Код:
:OVER
if not exist %d% echo Файла "%d%" не существует
goto ERROR
if exist %d% goto LISTING
Короче врядли кто нибудь знает как сделать, хотя...
Зарание спасибо за любой ответ
JonMagon вне форума Ответить с цитированием
Старый 11.07.2011, 13:24   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

опять Вы странным образом решаете странные задачи...

в принципе у Вас всё правильно было написано.
я себе позволил только блоки местами переставить (ну у вас же goto error выполнялась ВСЕГДА, вне зависимости от того, есть файл или нет!

посмотрите такой код:
Код:
@echo off
title Тестовый файл

echo.
set /P d="Введите наименование файла: " 

if not exist %d% goto Error 

rem LISTING
echo Тут у Вас будет листинг....

goto BAT_END


:Error
echo.
echo Файла "%d%" не существует
echo.


rem а это конец батника...
:BAT_END
pause
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.07.2011, 13:32   #3
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

Спасибо, посмотрел как Вы предложили, и сделал без переходов этих. Теперь новая проблема появилась, почему-то в первый раз не передает значение переменной, выдает ошибку, и написать еще раз, то передает, если уже файл будет сущестовать то все нормально пролетает, не пойму почему он в первый раз не передает значение переменной
Помогите решить проблему, сам код
Код:
@echo off
title Тестовый файл
echo Тестовый файл
:LAUNCH
echo.
echo 1) Запустить файл
echo 2) О программе
echo 3) Выход
echo.
set /P l="Введите номер действия: " 

IF %l%==1 ( echo. 
:ERROR
echo Список файлов:
echo.
DIR /B "%CD%"
echo.
set /P d="Введите наименование файла: " 
goto PROTECTED


)

IF %l%==2 ( echo.
echo /////////////////////////////
echo /// бла-бла-бла            ///
echo /// бла-бла-бла           ///
echo /////////////////////////////
goto LAUNCH
)

IF %l%==3 (echo. 
exit
)

:PROTECTED
if not exist %d% (echo Файла "%d%" не существует
goto ERROR)
if exist %d% (echo проверка)

Pause

Последний раз редактировалось JonMagon; 11.07.2011 в 13:36.
JonMagon вне форума Ответить с цитированием
Старый 11.07.2011, 14:25   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы не поверите, но ваш код работает нормально!

Единственное, что если вводите имя файла, которое содержит пробелы, то ОБЯЗАТЕЛЬНО нужно вводить это имя в двойных кавычках!

Давайте скриншоты, в каком случае у Вас не работает!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.07.2011, 14:33   #5
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

А нет, все работает действительно, просто если почему-то не указывать действие, а сразу писать название файла, то он будет выдавать ошибку.
JonMagon вне форума Ответить с цитированием
Старый 11.07.2011, 15:18   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
просто если почему-то не указывать действие, а сразу писать название файла, то он будет выдавать ошибку.
ну, это несложно (и даже желательно) побороть:
Код:
....
IF %l%==3 (echo. 
exit
)

echo Вы ввели недопустимый номер (%l%)! 
pause
goto LAUNCH

:PROTECTED
....

а вот как побороть вылет, если ввести несколько параметров, разделённых пробелом(ами) - я не знаю...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.07.2011, 15:25   #7
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

Serge_Bliznykov, о спасибо еще раз
JonMagon вне форума Ответить с цитированием
Старый 11.07.2011, 16:05   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
а вот как побороть вылет, если ввести несколько параметров, разделённых пробелом(ами) - я не знаю...
вроде разобрался чуток..
а, проблема была не в строчке ввода. там вводится всё классно.
а вот при использовании возникали проблемы.

JonMagon
вот ещё вариант.
вроде так получше чуток. (и, йоохо!, теперь двойные кавычки вводить не обязательно!!! )
Это пример опять с "моими любимыми" метками, захотите, перепишете через группировку команд в круглых скобках, как это Вы любите
Код:
@echo off
title Тестовый файл
echo Тестовый файл

:LAUNCH
echo.
echo 1) Запустить файл
echo 2) О программе
echo 3) Выход
echo.
set /P l="Введите номер действия: " 


if "%l%" equ "1" goto:pDoing
if "%l%" equ "2" goto:pAbout
if "%l%" equ "3" goto:pExit

echo Вы ввели недопустимый номер (%l%)! 
pause
goto LAUNCH

:pDoing
echo. 
:ERROR
echo Список файлов:
echo.
DIR /B "%CD%"
echo.
set "d=" 
set /P d="Введите наименование файла: " 
set "d=%d:"=%"
goto PROTECTED

:pAbout
echo.
echo /////////////////////////////
echo /// бла-бла-бла            ///
echo /// бла-бла-бла           ///
echo /////////////////////////////
goto LAUNCH

:pExit
echo. 
exit


:PROTECTED
if not exist "%d%" (echo Файла "%d%" не существует
goto ERROR)
if exist "%d%" (echo проверка)

Pause
p.s. обратите внимание на следующие четыре факта.
1) как теперь проверяется введённый номер
2) на строчку set "d=%d:"=%"
это не я придумал. взял на форуме ру-боарда, там есть обалденное обсуждение программирования на BAT файлах. так вот, эта строчка удалит все двойные кавычки из имени файла.
3) имя файла в команде EXIST (NOT EXIST) указано в двойных кавычках. Это и решает проблему с пробелами в имени файла
4) выделенное фиолетовым можно смело убрать! Раз мы не ушли на метку ERROR по несущестованию файла, значит файл существует! Можно уже и не проверять!

успехов в учёбе.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.07.2011, 16:08   #9
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

у меня не столь большой проект, поэтому и пишу на батнике.
Цитата:
успехов в учёбе.
Спасибо
JonMagon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с оператором IF (*.bat) JonMagon Помощь студентам 0 11.07.2011 08:15
проблема с bat файлом DEsh Помощь студентам 0 04.04.2011 07:52
Запись в файл с переходом на другую строку Syltan Общие вопросы по Java, Java SE, Kotlin 3 29.07.2010 18:03
Bat-файл. Проблема с кодом. Zlotan Помощь студентам 2 20.01.2010 01:22
Помогите с переходом в файл Справки!!! Sanek777 Общие вопросы Delphi 2 31.07.2008 13:27