Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] reg при обращении к разделу, содержащему знаки % (http://forum.oszone.net/showthread.php?t=343209)

TolikD 08-12-2019 12:40 2899487

reg при обращении к разделу, содержащему знаки %
 
Не могу понять, как экранировать знак % при обращении к реестру
Код:

reg query HKCU\Console\%%SystemRoot%%_system32_cmd.exe
Ошибка: Не удается найти указанный раздел или параметр в реестре.


Petya V4sechkin 08-12-2019 13:09 2899492

TolikD, пример:
Код:

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


TolikD 08-12-2019 13:28 2899497

Да, работает.
То есть без set я так понял не обойтись? Мне не принципиально, просто интересно.

Iska 08-12-2019 16:50 2899532

TolikD, у меня работает и первый вариант:
Скрытый текст



Windows 7 SP1 x64.

alpap 08-12-2019 22:28 2899574

Цитата:

Цитата TolikD
Да, работает »

а я думаю что этот ключ то есть, то нет
Цитата:

Цитата Iska
у меня работает и первый вариант »

а у меня нет, выдает в точности как у TolikD
Цитата:

Цитата TolikD
Не удается найти указанный раздел или параметр в реестре »

[у меня также Windows 7 SP1 x64]
залез в реестр ручками - нет такого ключа у меня, для проверки можно запустить:
Код:

reg query "HKCU\Console" /s|find "cmd.exe"
у меня, естественно, пусто.

TolikD 09-12-2019 17:40 2899674

Windows 7 SP1 x86
На данный момент у меня работает и первый вариант, при том, что в прошлый раз не работал.
Не пойму с чем это связано...

alpap 09-12-2019 22:38 2899701

Цитата:

Цитата TolikD
Не пойму с чем это связано... »

вероятно все-таки с
Цитата:

Цитата alpap
я думаю что этот ключ то есть, то нет »


TolikD 12-12-2019 01:27 2900038

alpap, есть ещё вариант, что тестировал экранирование то в батнике, то в командной строке и банально сам себя запутал. Там по разному работает. Попробуй выполнить в cmd.exe
Код:

set V=HKCU\Console\%%SystemRoot%%_system32_cmd.exe & reg query %V%
Тут я не понимаю, какой должен быть синтаксис.

alpap 12-12-2019 10:23 2900061

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 2900111

Да, действительно, команда 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 2900117

Цитата:

Цитата alpap
я вообще не понимаю как выглядит этот ключ, »

Так:
Скрытый текст


Цитата:

Цитата alpap
я пытался создать такой для проверки - не получается »

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

Цитата:

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

Нет. Не тогда.

Iska 12-12-2019 21:54 2900141

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 2900181

Iska, да тут просто полный разбор всех вариантов по моему вопросу


Время: 17:07.

Время: 17:07.
© OSzone.net 2001-