Войти

Показать полную графическую версию : Вопрос об операции FOR


Browning Zed
11-12-2018, 19:57
Господа, не ругайте за нубство, но помогите прояснить следующую ситуацию. Если выполняется операция FOR, то название переменной, участвующей в цикле, обычно будет иметь вид "%%a", или "%%b", или "%%c" и т.д. Но также (как выяснилось на практике), вместо букв можно использовать цифры: "%%1", "%%2" и т.д. Тем не менее, цифры в переменных, сколько я не встречал примеров с операцией FOR, никогда не используются, но всегда фигурируют буквы. Связано ли это с какими-либо ограничениями, либо с чем-то еще?

Iska
11-12-2018, 22:21
Но также (как выяснилось на практике), вместо букв можно использовать цифры: "%%1", "%%2" и т.д. »
Переменные вида %0-%9 зарезервированы для приёма переданных скрипту/процедуре параметров (причём %0 — ссылка на сам пакетный файл или метку процедуры:
@echo off
setlocal enableextensions enabledelayedexpansion

echo [%0]
call :SampleSub

endlocal
exit /b 0

:SampleSub
echo [%0]
exit /b

https://i.imgur.com/hRXocz7.png
).

P.S. В принципе, Вы можете получить доступ к переменным цикла разбора вида %%1-%%9 как к токенам (https://stackoverflow.com/questions/8520313/windows-batch-script-to-parse-csv-file-and-output-a-text-file/8520993#8520993), но это надо уж очень постараться.

Browning Zed
11-12-2018, 22:58
P.S. В принципе, Вы можете получить доступ к переменным цикла разбора вида %%1-%%9 как к токенам, но это надо уж очень постараться. »
Да в том-то и соль, что даже не старался, отчего и возник вопрос. Ради примера:

For /f "tokens=3" %%1 in ('reg query "ветка_реестра" /v "параметр_реестра"') do echo %%1

будет возвращать то же значение, что и:

For /f "tokens=3" %%a in ('reg query "ветка_реестра" /v "параметр_реестра"') do echo %%a


Переменные вида %0-%9 зарезервированы для приёма переданных скрипту/процедуре параметров (причём %0 — ссылка на сам пакетный файл или метку процедуры: »
Спасибо за пояснение. А не будете так добры ссылочку кинуть по этому вопросу, чтобы была возможность поштудировать на досуге?

alpap
12-12-2018, 01:24
ссылочку кинуть по этому вопросу »
если разговор о параметрах, то немало можно посмотреть в справке к команде: call /?

Iska
14-12-2018, 02:57
будет возвращать то же значение, что и: »
Это как бы логично — и там, и там переменной цикла присваиваются одни и те же значения. Но лучше ограничивать себя использованием здесь буквенных переменных (не забывая о том, что в этом случае они ещё и регистрозависимы).

А не будете так добры ссылочку кинуть по этому вопросу, чтобы была возможность поштудировать на досуге? »
Да особо как-то и нечего посоветовать, такого всеобъемлющего и доступного, увы. А так — ряд забавных или необычных деталей можно почерпнуть на SS64: An A-Z Index of the Windows CMD command line | SS64.com (https://ss64.com/nt/) (но это, понятно, уже не для начального обучения).




© OSzone.net 2001-2012