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

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

Ответить
Настройки темы
CMD/BAT - Почему использование goto в for приводит к 1разовому выполнению цикла?

Старожил


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

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


Всем привет!
Вот
До:
Код: Выделить весь код
@ECHO OFF
FOR /F "tokens=*" %%A IN ('dir /s /b /a-d "%CD%\"') DO (
echo "%%A"
)
PAUSE
После:
Код: Выделить весь код
@ECHO OFF
FOR /F "tokens=*" %%A IN ('dir /s /b /a-d "%CD%\"') DO (
echo "%%A"
goto test1
:test1
echo Выведет первый файл и цикл завершится
)
PAUSE
в папке где мнооого файлов может не сработать

Как решить эту проблему?

Отправлено: 01:21, 05-08-2013

 

Ветеран


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

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


Цитата nfs911:
Как решить эту проблему? »
Лучше решать правильную проблему: зачем Вам goto внутри цикла разбора?

Отправлено: 01:49, 05-08-2013 | #2



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

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


Старожил


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

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


Iska,
Код: Выделить весь код
@ECHO OFF
FOR /F "tokens=*" %%A IN ('dir /s /b /a-d "%CD%\"') DO (
echo "%%A"
goto test1
:next
pause
)
:next2
echo обходим :test1 после завершения цикла
goto exit

:test1
echo Выведет первый файл и цикл завершится
goto next
rem возвращаемся обратно в цикл для перечисления оставшихся файлов

:exit
PAUSE
Пробовал,аналогично.

Последний раз редактировалось nfs911, 05-08-2013 в 09:30.


Отправлено: 09:21, 05-08-2013 | #3


Ветеран


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

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


nfs911, Вы не ответили на вопрос — зачем? Приведите реальное ТЗ.

Я не припомню ни единого случая, чтобы мне хоть раз приходилось пользовать «goto :label» на «:label» внутри цикла разбора. Как правило, всё решается условными операторами и процедурами.

Отправлено: 09:29, 05-08-2013 | #4


Старожил


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

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


какая альтернатива goto?если нужно if not строка1==строка2 goto cod1
goto else

(пишу коротка потомучто я с телефона)

Отправлено: 10:41, 05-08-2013 | #5


Googler


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

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


Цитата nfs911:
в папке где мнооого файлов может не сработать
Как решить эту проблему? »
это не ошибка, а предсказуемое поведение батника, т.к. метка командой не является
Код: Выделить весь код
FOR /F "tokens=*" %%A IN ('dir /s /b /a-d "%CD%\"') DO (
echo "%%A"
goto test1
:test1
echo Выведет первый файл и цикл завершится
)
PAUSE
интерпретируется как последовательность N команд:
Код: Выделить весь код
echo "file1"
goto test1
echo Выведет первый файл и цикл завершится

echo "file2"
goto test1
echo Выведет первый файл и цикл завершится

echo "file3"
goto test1
echo Выведет первый файл и цикл завершится


echo "fileN"
goto test1
echo Выведет первый файл и цикл завершится

:test1
echo Выведет первый файл и цикл завершится
)
PAUSE
Цитата nfs911:
какая альтернатива goto?если нужно if not строка1==строка2 goto cod1
goto else »
как и в любом процедурном языке - оформить код процедурой и вызывать по условию:
Код: Выделить весь код
@echo off

if not "строка1"=="строка2" (call:cod1 Параметр1  "Параметр 2") else call:cod2

exit

:: -- блок функций --

:cod1
 echo какой-то код 1
 echo/
 echo %~1
 echo %~2
goto:eof

:cod2
 echo какой-то код 2
 echo/
 echo %*
goto:eof
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:45, 05-08-2013 | #6


Ветеран


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

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


amel27, рад видеть Вас в добром здравии!

Мне такая трактовка, увы, не приходила в голову .

Цитата nfs911:
какая альтернатива goto?если нужно if not строка1==строка2 goto cod1
goto else »
Код: Выделить весь код
if "строка1" neq "строка2" (
   команда A1
   команда A2
   команда AN
) else (
   команда B1
   команда B2
   команда BN
)

Отправлено: 11:00, 05-08-2013 | #7


Старожил


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

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


Iska, на c++ похоже.прийду домой,попробую.amel27, ваш вариант тоже интересный.Благодарю

Отправлено: 11:18, 05-08-2013 | #8


Ветеран


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

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


amel27, в качестве ликбеза, почему echo/ ? Есть ли разница между echo/ и echo. ?

Отправлено: 11:52, 05-08-2013 | #9


Googler


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

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


sov44, символ "." используется в именах файлов - со всеми вытекающими последствиями
в качестве эксперимента:
Код: Выделить весь код
copy/y %windir%\notepad.exe .\echo. >nul
echo.
PAUSE

copy/y %windir%\notepad.exe .\echo.123 >nul
echo.123
Цитата nfs911:
на c++ похоже »
CMD - интерпретатор, а CPP - компилятор!
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:15, 05-08-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Почему из цикла не выходит? mataranga Скриптовые языки администрирования Windows 1 18-12-2012 17:14
Как заменить Goto Raf_z AutoIt 1 25-10-2012 23:51
Аналог goto Frost_Imp AutoIt 8 24-07-2009 17:14
CMD/BAT - [решено] Использование If в теле цикла For ven00m Скриптовые языки администрирования Windows 3 11-01-2008 17:09
Использование opendir в PHP приводит к ошибке Igor_I Вебмастеру 7 29-01-2006 14:14




 
Переход