Войти

Показать полную графическую версию : [решено] reg при обращении к разделу, содержащему знаки %


TolikD
08-12-2019, 12:40
Не могу понять, как экранировать знак % при обращении к реестру
reg query HKCU\Console\%%SystemRoot%%_system32_cmd.exe
Ошибка: Не удается найти указанный раздел или параметр в реестре.

Petya V4sechkin
08-12-2019, 13:09
TolikD, пример:
set V=HKCU\Console\%%SystemRoot%%_system32_cmd.exe
reg query %V%

TolikD
08-12-2019, 13:28
Да, работает.
То есть без set я так понял не обойтись? Мне не принципиально, просто интересно.

Iska
08-12-2019, 16:50
TolikD, у меня работает и первый вариант:
https://i.imgur.com/HNwJKLU.png

https://i.imgur.com/09rCoVj.png
Windows 7 SP1 x64.

alpap
08-12-2019, 22:28
Да, работает »
а я думаю что этот ключ то есть, то нет
у меня работает и первый вариант »
а у меня нет, выдает в точности как у TolikD
Не удается найти указанный раздел или параметр в реестре »
[у меня также Windows 7 SP1 x64]
залез в реестр ручками - нет такого ключа у меня, для проверки можно запустить:

reg query "HKCU\Console" /s|find "cmd.exe"

у меня, естественно, пусто.

TolikD
09-12-2019, 17:40
Windows 7 SP1 x86
На данный момент у меня работает и первый вариант, при том, что в прошлый раз не работал.
Не пойму с чем это связано...

alpap
09-12-2019, 22:38
Не пойму с чем это связано... »
вероятно все-таки с
я думаю что этот ключ то есть, то нет »

TolikD
12-12-2019, 01:27
alpap, есть ещё вариант, что тестировал экранирование то в батнике, то в командной строке и банально сам себя запутал. Там по разному работает. Попробуй выполнить в cmd.exe
set V=HKCU\Console\%%SystemRoot%%_system32_cmd.exe & reg query %V%
Тут я не понимаю, какой должен быть синтаксис.

alpap
12-12-2019, 10:23
TolikD,
так как написано не будет работать, переменная не раскроется в этой же строке, надо команду с переменной писать на новой строке:

set V=HKCU\Console\%%SystemRoot%%_system32_cmd.exe
reg query %V%

я вообще не понимаю как выглядит этот ключ, я пытался создать такой для проверки - не получается
что выводит команда:

reg query "HKCU\Console" /s|find "cmd.exe"

сделал себе такой ключ, в bat файле спокойно вывожу содержимое командой:

reg query "HKCU\Console\%SystemRoot%_system32_cmd.exe"

точно такой же командой вижу содержимое и из ком. строки.

TolikD
12-12-2019, 18:01
Да, действительно, команда set так не работает, как я думал
C:\Windows\system32>set a=hello & echo %a%
%a%
C:\Windows\system32>echo %a%
hello

Теперь понятно, как надо делать в одну строку
C:\Windows\system32>set a=hello & call echo %a%
hello
Но это не меняет дело, экранирование всё равно не работает
C:\Windows\system32>set V=HKCU\Console\%%SystemRoot%%_system32_cmd.exe & call echo %V%
HKCU\Console\%C:\Windows%_system32_cmd.exe
C:\Windows\system32>set V=HKCU\Console\%%SystemRoot%%_system32_cmd.exe

C:\Windows\system32>set V
V=HKCU\Console\%C:\Windows%_system32_cmd.exe

Из батника же всё нормально
set V=HKCU\Console\%%SystemRoot%%_system32_cmd.exe
echo %V%

C:\temp>set V=HKCU\Console\%SystemRoot%_system32_cmd.exe

C:\temp>echo HKCU\Console\%SystemRoot%_system32_cmd.exe
HKCU\Console\%SystemRoot%_system32_cmd.exe

я вообще не понимаю как выглядит этот ключ, я пытался создать такой для проверки - не получается
что выводит команда:
Этот ключ создаётся не тогда, когда делаешь запуск cmd.exe c ярлыка в пуске или пункта "Выполнить", а когда непосредственно делаешь запуск батника "file.cmd"

Iska
12-12-2019, 18:45
я вообще не понимаю как выглядит этот ключ, »
Так:
https://i.imgur.com/HzlglVK.png

я пытался создать такой для проверки - не получается »
Win-R, cmd.exe, Enter, затем Alt-Space, Свойства. Что-нибудь изменить в свойствах окна консоли (например, Шрифт, его размер), нажать OK. В реестре появится подраздел по имени исполняемого файла — HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe.

Этот ключ создаётся не тогда, когда делаешь запуск cmd.exe c ярлыка в пуске или пункта "Выполнить", а когда непосредственно делаешь запуск батника "file.cmd" »
Нет. Не тогда.

Iska
12-12-2019, 21:54
TolikD, тут у Вас сразу куча ошибок.

1. Заключайте присваивание литеральных значений переменным окружения в кавычки, если не хотите добавления лишних пробелов:
set "sVar=bla-bla-bla" & echo [%sVar%]
Либо убирайте эти пробелы:
set sVar=bla-bla-bla& echo [%sVar%]
из кода.

2. Когда Вы задаёте значения параметров у reg.exe — тоже используйте кавычки:
reg.exe query "HKCU\Console"

3. Переменная окружения %V% в команде «reg.exe query %V%» ещё не будет существовать:
C:\Мои проекты\0287>set sVar=bla-bla-bla & echo [%sVar%]
[%sVar%]
— поскольку сначала интерпретируется вся строка, а затем только начинается её разбор и исполнение отдельных команд.

4. Чтобы разрешить подобное использование переменных окружения, можно использовать механизм двойного раскрытия по call:
C:\Мои проекты\0287>set "sVar=bla-bla-bla" & call echo [%sVar%]
[bla-bla-bla]

5. Другой путь — включение отложенного расширения переменных окружения по умолчанию (в реестре), или запуск интерпретатора команд с параметром /v:on, а затем использование отложенного расширения переменных окружения:
set "sVar=bla-bla-bla" & echo [!sVar!]

6. Экранирование непосредственно в командной строке:
C:\Мои проекты\0287>reg.exe query HKEY_CURRENT_USER\Console\^%SystemRoot^%_system32_cmd.exe

HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe
ScreenBufferSize REG_DWORD 0x32008c
WindowSize REG_DWORD 0x2a008c
ScreenColors REG_DWORD 0x7
PopupColors REG_DWORD 0xf5

либо:
C:\Мои проекты\0287>reg.exe query ^"HKEY_CURRENT_USER\Console\^%SystemRoot^%_system32_cmd.exe^"

HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe
ScreenBufferSize REG_DWORD 0x32008c
WindowSize REG_DWORD 0x2a008c
ScreenColors REG_DWORD 0x7
PopupColors REG_DWORD 0xf5
ColorTable00 REG_DWORD 0x0


Теперь, что касается именно set Var= с процентами и последующего за ним reg query %Var% при не разрешённом отложенном расширении переменных окружения.
C:\Мои проекты\0287>set "sVar=HKEY_CURRENT_USER\Console\^%SystemRoot^%_system32_cmd.exe" & call reg.exe query ^%sVar^%

HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe
ScreenBufferSize REG_DWORD 0x32008c
WindowSize REG_DWORD 0x2a008c
ScreenColors REG_DWORD 0x7
PopupColors REG_DWORD 0xf5
ColorTable00 REG_DWORD 0x0
ColorTable01 REG_DWORD 0x800000

TolikD
13-12-2019, 09:56
Iska, да тут просто полный разбор всех вариантов по моему вопросу




© OSzone.net 2001-2012