@xsash

Почему сбрасывается счетчик в bat скрипте?

Есть простой скрипт, в качестве полезной нагрузки в примере создание папки с номером прохода.
Если пинг есть и не выполняется переход по goto (или call), все норм. Переменная "N" увеличивается с каждым проходом.

@echo off
setlocal EnableDelayedExpansion

SET ip=192.168.0.33
SET folder=testfolder

for /l %%n in (1,1,10) do (

:: Ожидаем устройство в сети
:loop
timeout /t 5 /nobreak >nul
ping -n 1 %ip% |find "TTL=" || goto :loop

echo ==============================================================
echo Start: %%n pass || %folder%
echo ==============================================================

echo Wait 5 sec
timeout /t 5 /nobreak >nul

mkdir %folder%-%%n
)


Но если пинг не прошел и был переход на ":loop" - вместо числа, выводится просто текстовое значение
Reply from 192.168.0.33: bytes=32 time<1ms TTL=64
==============================================================
Start: %n pass
==============================================================
Wait 5 sec
  • Вопрос задан
  • 237 просмотров
Пригласить эксперта
Ответы на вопрос 1
wisgest
@wisgest
Не ИТ-специалист
Командные файлы обрабатываются построчно, если только не будет обнаружена составная команда, занимающая несколько строк. Но дальше этого не идёт: нет никаких предварительной компиляции, токенизации, проверки синтаксиса командного файла в целом и даже запоминания его содержимого в памяти. При переходе к следующей строке или команде, занимающей несколько строк, предыдущая забывается. Нет никакой разницы между выходом по GOTO из цикла FOR и переходом на строку внутри него — и то и другое прекращает цикл.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы