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

Аватара пользователя
megaloman

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

Сообщение megaloman »

Цитата bredych:



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




Это не глюк c циклом, это неправильное раскрытие переменных внутри оператора "скобки"

Как сказали выше, для этого требуется отложенное расширение переменных...

Для наглядности:



Код:

Код: Выделить всё

@echo off
setlocal enabledelayedexpansion
set x=1
(
set x=2
echo x = %x% - неправильно
echo x = !x! - правильно
)
pause


Цитата bredych:



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




И это не глюк цикла. Как уже сказали выше: что reg выдает, то и получаем на выходе

Если требуется сортировка:



Код:

Код: Выделить всё

...('reg query HKU^|sort')...

Про имена выходных файлов, тоже написали...

В общем, для полноценной помощи, необходима правильная формулировка задачи, а не неправильные попытки её решения...
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата megaloman:



Не понятно, с каким именем Вы хотите получить выходные файлы. Зачем пытаетесь сделать какие-то tmp
CMD/BAT - [решено] Как работать с переменной внутри цикла FOR?




в принципе, я хотел убедиться, что сама идея работает.

Это подзадача к более
CMD/BAT - Удалить корявые ассоциации у всех юзеров
.

Отсюда и цикл - внести переменную в значения, которые потом вносить в реестр или передавать setacl -у, поскольку напрямую переменную перед передачей параметров не ресолвило. В итоговом цикле разные имена файлов не нужны, достаточно в конце цикла задать исполнение его, ожидание исполнения, и цикл заново, перезаписать для другого юзера.



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



Насчет !FTMP! мне было неочевидно, в промежутках меж работы гуглил, листал маны, так и не нашел, почему надо делать так, а не обычным процентом.

Но сработало.

Правда как-то странно:

В вывод даёт полный набор строк от первого, 18 юзера, и только по одной строке от остальных.



вывод:

[spoiler]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[/spoiler]






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

сработало только когда я заремил переименование вывода, чтоб всё выводило в один файл..
Аватара пользователя
bredych

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

Сообщение bredych »

Цитата bredych:



Насчет !FTMP! мне было неочевидно, в промежутках меж работы гуглил, листал маны, так и не нашел, почему надо делать так, а не обычным процентом.
CMD/BAT - [решено] Как работать с переменной внутри цикла FOR?






Код:

Код: Выделить всё

setlocal /?

и
CMD/BAT - [решено] Как работать с переменной внутри цикла FOR?
— переменные окружения, находящиеся в обрамлении %…% внутри операторных скобок, раскрываются при входе в эти скобки. Сразу и однократно. Вот поэтому нужно отложенное раскрытие переменных окружения и обрамление !…!.
Аватара пользователя
Iska

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

Сообщение Iska »

bredych, дополнительно о связывании можете почитать здесь:



Код:

с примерами.
Аватара пользователя
Petya V4sechkin

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

Сообщение Petya V4sechkin »

bredych, дополнительно о связывании можете почитать здесь:



Код:

с примерами.
Аватара пользователя
alexfrienmank

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

Сообщение alexfrienmank »

Здравствуйте!

Помогите, пожалуйста, с ошибкой в коде.

Цикл ищет определенный текст в реестре, затем записывает адрес текста в переменную. Но почему-то переменная оказывается пустая.



Код:

Код: Выделить всё

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
Аватара пользователя
alpap

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

Сообщение alpap »

alexfrienmank,

странно как вообще код запустился - ошибка на ошибке

что показывает просто запуск:



Код:

Код: Выделить всё

reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products /f https://support.cryptopro.ru/ /d /s

и что надо забрать из этого вывода.
Аватара пользователя
alexfrienmank

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

Сообщение alexfrienmank »

Цитата alexfrienmank:



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




ну?



Код:

Код: Выделить всё

set "var=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7AB5E7046046FB044ACD63458B5F481C\InstallProperties"

в чем проблема, причем тут for ?
Аватара пользователя
alpap

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

Сообщение alpap »

alpap,

for нужен для поиска адреса в реестре, т.к. адрес может меняться на компьютерах.

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

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

Сообщение alexfrienmank »

alpap,

for нужен для поиска адреса в реестре, т.к. адрес может меняться на компьютерах.

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

Вернуться в «Скриптовые языки администрирования Windows»