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

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

Ответить
Настройки темы
CMD/BAT - [решено] Как работать с переменной внутри цикла FOR?

Новый участник


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

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


Подскажите, пожалуйста. Не могу понять, что происходит.
Мне нужно, чтобы при каждой итерации в цикле for (кусок кода ниже) переменная j увеличивалась на 1. Но даже присваивание ей не работает: на каждом шаге получаю "before: 1, after: 1". Что я делаю не так?

Код: Выделить весь код
SET j=1
FOR /F %%a in ('dir /b .\*.jpg') do (
@echo before %j%
@SET /a j = %j% + 1 
@echo after %j%
REM тут вырезано все, что не относилось к этой ошибке
)

Отправлено: 22:04, 29-09-2010

 

Аватара для YuS_2

Crazy


Contributor


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

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


Цитата bredych:
какой-то странный глюк с циклом. »
Это не глюк c циклом, это неправильное раскрытие переменных внутри оператора "скобки"
Как сказали выше, для этого требуется отложенное расширение переменных...
Для наглядности:
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
set x=1
(
set x=2
echo x = %x% - неправильно
echo x = !x! - правильно
)
pause
Цитата bredych:
Почему 18 перепрыгивает вниз? »
И это не глюк цикла. Как уже сказали выше: что reg выдает, то и получаем на выходе
Если требуется сортировка:
Код: Выделить весь код
...('reg query HKU^|sort')...
Про имена выходных файлов, тоже написали...
В общем, для полноценной помощи, необходима правильная формулировка задачи, а не неправильные попытки её решения...

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:26, 04-09-2018 | #31



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

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


Ветеран


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

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


Цитата megaloman:
Не понятно, с каким именем Вы хотите получить выходные файлы. Зачем пытаетесь сделать какие-то tmp »
в принципе, я хотел убедиться, что сама идея работает.
Это подзадача к более ранней.
Отсюда и цикл - внести переменную в значения, которые потом вносить в реестр или передавать setacl -у, поскольку напрямую переменную перед передачей параметров не ресолвило. В итоговом цикле разные имена файлов не нужны, достаточно в конце цикла задать исполнение его, ожидание исполнения, и цикл заново, перезаписать для другого юзера.

Про слеш в имени - ага, не подумал.. Думал, команда цикла будет выдавать список только самих ключей без родителя. Отсюда еще одна ошибка в выводящемся коде (и еще одна причина сначала посмотреть, что выведется, а не пускать на исполнение сразу))

Насчет !FTMP! мне было неочевидно, в промежутках меж работы гуглил, листал маны, так и не нашел, почему надо делать так, а не обычным процентом.
Но сработало.
Правда как-то странно:
В вывод даёт полный набор строк от первого, 18 юзера, и только по одной строке от остальных.
вывод:
regedit 4
setacl.exe -on HKU\HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice -ot reg -actn trustee -trst n1:domain\adminuser;ta:remtrst;w:dacl
reg delete HKU\HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f
reg delete HKU\HKEY_USERS\S-1-5-18\Software\Classes\.adoc /f
reg delete HKU\HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f
reg delete HKU\HKEY_USERS\S-1-5-19\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f
reg delete HKU\HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f
reg delete HKU\HKEY_USERS\S-1-5-21-blabla\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f
reg delete HKU\HKEY_USERS\S-1-5-21-blabla_Classes\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f
reg delete HKU\HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f


апд, нашел глюк, я эту строку тупо забыл с % на ! заменить.
сработало только когда я заремил переименование вывода, чтоб всё выводило в один файл..

Последний раз редактировалось bredych, 07-09-2018 в 14:27.


Отправлено: 12:06, 07-09-2018 | #32


Ветеран


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

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


Цитата bredych:
Насчет !FTMP! мне было неочевидно, в промежутках меж работы гуглил, листал маны, так и не нашел, почему надо делать так, а не обычным процентом. »
Код: Выделить весь код
setlocal /?
и пример из этой же темы выше — переменные окружения, находящиеся в обрамлении %…% внутри операторных скобок, раскрываются при входе в эти скобки. Сразу и однократно. Вот поэтому нужно отложенное раскрытие переменных окружения и обрамление !…!.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:13, 07-09-2018 | #33



Moderator


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

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


bredych, дополнительно о связывании можете почитать здесь:
Код: Выделить весь код
set /?
с примерами.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:30, 07-09-2018 | #34


Новый участник


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

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


Здравствуйте!
Помогите, пожалуйста, с ошибкой в коде.
Цикл ищет определенный текст в реестре, затем записывает адрес текста в переменную. Но почему-то переменная оказывается пустая.
Код: Выделить весь код
chcp 1251
set flg=true
for /f "tokens=1" %%i in ('reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products /f https://support.cryptopro.ru/ /d /s') do (
if flg equ true (
set flg=fls
set x="%%i") else goto proc)
:proc
echo %x%
pause
exit

Отправлено: 06:53, 23-11-2018 | #35


Ветеран


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

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


alexfrienmank,
странно как вообще код запустился - ошибка на ошибке
что показывает просто запуск:
Код: Выделить весь код
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products /f https://support.cryptopro.ru/ /d /s
и что надо забрать из этого вывода.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:03, 23-11-2018 | #36


Новый участник


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

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


alpap,
Результат команды:
Код: Выделить весь код
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7AB5E7046046FB044ACD63458B5F481C\InstallProperties
    HelpLink    REG_EXPAND_SZ    https://support.cryptopro.ru/

Поиск завершен: найдено совпадений: 1.
Нужно в переменную записать адрес, например,
x="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7AB5E7046046FB044ACD63458B5F481C\InstallProperties"

Отправлено: 06:09, 26-11-2018 | #37


Ветеран


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

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


Цитата alexfrienmank:
Нужно в переменную записать адрес »
ну?
Код: Выделить весь код
set "var=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7AB5E7046046FB044ACD63458B5F481C\InstallProperties"
в чем проблема, причем тут for ?

Отправлено: 01:14, 27-11-2018 | #38


Новый участник


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

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


alpap,
for нужен для поиска адреса в реестре, т.к. адрес может меняться на компьютерах.
Проблема в том, что set var=HKEY... можно сделать, но значение переменной, к сожалению, не сохраняется.

Отправлено: 06:49, 27-11-2018 | #39


Ветеран


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

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


все равно я не понимаю зачем это надо именно так, если что-то внутри этого искать еще понятно ...
Код: Выделить весь код
@echo off
set "var=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7AB5E7046046FB044ACD63458B5F481C\InstallProperties"

for /f "delims=" %%a in ('2^>nul reg query "%var%"') do set "newvar=%%a"
if defined newvar (echo %newvar%) else echo No registry key or parameter
pause

Отправлено: 23:10, 27-11-2018 | #40



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. NiOl Скриптовые языки администрирования Windows 7 31-01-2019 19:58
VBA - Как присвоить переменной содержимое Range на VBA for WORD Selena57 Программирование и базы данных 1 25-03-2009 00:52
[решено] Первая строчка переменной. Как скопировать? r35TnX AutoIt 5 06-03-2009 07:12
CMD/BAT - [решено] как правильно передать переменные подпрограмме из цикла for akrav Скриптовые языки администрирования Windows 4 07-01-2008 17:51
js имя объекта из переменной, как? E-mail Вебмастеру 13 15-03-2005 07:22




 
Переход