Другие языки программирования и технологии

Командные файлы

есть командный файл. . он испольняется так. .

запуск командного файла и приостановка его выполнения на заданную
величину времени. Величина задержки (5, 10, 20, 30, 60 секунд) выбирается
пользователем с помощью меню

есть код бат файла. . народ помогите мне нужно узнать что делают строчки 2) 3) 10)

1) @echo off
2)Setlocal EnableDelayedExpansion

3) ind "Button" <"%~f0" | more +1

4) Set Button.1=5
5) Set Button.2=10
6) Set Button.3=20
7) Set Button.4=30
8) Set Button.5=60

9) choice /C 12345 /M "Choose Delay"
10) timeout /t! button.%errorlevel%! /nobreak

заранее спасибо)
2)Setlocal EnableDelayedExpansion
- Необходимо для того, чтобы была действительной конструкция! button.%errorlevel%!, которая в свою очередь необходима из-за вложенности одной переменной в другую.

3) find "Button" <"%~f0" | more +1
-Ищет все вхождения строки Button в самом командном файле .
%~f0 - переменная %0, содержащая путь к исполняемому командному файлу, расширяется до полного имени. Символ < означает ввод из файла.
| more +1 - вывод команды передается на вход команды more, которая нужна для того, чтобы пропустить вывод первого вхождения Button, т. е. самой строки с самой командной find (параметр +1). Таким образом будут выведены только строки Set Button....

10) timeout /t! button.%errorlevel%! /nobreak
- запуск (внешней) программы timeout с ключами.
!button.%errorlevel%! - вначале раскрывается вложенная переменная errorlevel, значение которой соответствует результату выполнения choice (введенной цифре) . Затем раскрывается все выражение полностью. Например если была введена цифра 4, то будет раскрыта переменная Button.4 (в строку 30). Очевидно, что данное значение используется как указание на количество секунд (параметр /t). Параметр /nobreak, как нетрудно догадаться, означает запрет на прерывание выполнения команды пользователем.
Павел Самсонов
Павел Самсонов
9 825
Лучший ответ
вот в чем хватило сил разобраться

setlocal enabledelayedexpansion

В обычном случае, чтобы узнать значение переменной окружения, надо воспользоваться конструкцией %переменная%. Однако, если значение переменной меняется внутри цикла и читается там же, то для корректной работы батника, нужно использовать команду setlocal enabledelayedexpansion и вместо символа "%", использовать символ "!". Иначе, значение переменной в цикле будет всегда одним и тем же - таким, каким было до входа в цикл.

find "Button" <"%~f0" | more +1

+n : Start displaying the first file at line n

more выведет на экран со строки 1 результаты команды

find "Button" <"%~f0"

%0 is replaced by the batch file name

%~f0
Expands %0 to a fully qualified path name.
вторая, отключить локальное устройство. Остальные не знаю