Как запустить RegEdit Windows по определенному пути?

StackOverflow https://stackoverflow.com/questions/137182

  •  02-07-2019
  •  | 
  •  

Вопрос

Как мне запустить Windows ' Отредактировать с определенным расположенным путем, например "HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0", значит, мне не нужно нажимать?

Каков аргумент командной строки для этого?Или есть ли место, где можно найти объяснение переключений RegEdit?

Это было полезно?

Решение

Есть программа под названием Регджампинг, автор Марк Руссинович, это делает именно то, что вы хотите.Он запустит regedit и переместит его в нужный вам ключ из командной строки.

RegJump использует (или, по крайней мере, привык) одно и то же окно regedit при каждом вызове, поэтому, если вы хотите открыть несколько сеансов regedit, вам все равно придется делать все по старинке для всех, кроме одного, принятого RegJump.Небольшое предостережение, но, во всяком случае, его следует принять к сведению.

Другие советы

Используйте следующий пакетный файл (добавить в filename.bat):

REG ADD HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit /v LastKey /t REG_SZ /d Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Veritas\NetBackup\CurrentVersion\Config /f
START regedit

для замены:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Veritas\NetBackup\CurrentVersion\Config

с указанием пути к вашему реестру.

От http://windowsxp.mvps.org/jumpreg.htm (Я не пробовал ничего из этого):

Когда вы запускаете Regedit, он автоматически открывает последний просмотренный ключ.(Редактор реестра в Windows XP сохраняет последний просмотренный раздел реестра в отдельном месте).Если вы хотите перейти к определенному разделу реестра напрямую, не переходя по путям вручную, вы можете использовать любой из этих методов / инструментов.

Вариант 1
Использование VBScript:Скопируйте эти строки в документ Блокнота и сохраните как registry.vbs

'Launches Registry Editor with the chosen branch open automatically
'Author  : Ramesh Srinivasan
'Website: http://windowsxp.mvps.org

Set WshShell = CreateObject("WScript.Shell")
Dim MyKey
MyKey = Inputbox("Type the Registry path")
MyKey = "My Computer\" & MyKey
WshShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\Lastkey",MyKey,"REG_SZ"
WshShell.Run "regedit", 1,True
Set WshShell = Nothing

Дважды щелкните Registry.vbs и затем введите полный путь к реестру, который вы хотите открыть.

Пример: HKEY_CLASSES_ROOT\.MP3

Ограничение:Описанный выше метод не помогает, если Regedit уже открыт.

Примечание:Для Windows 7 вам необходимо заменить строку MyKey = "My Computer\" & MyKey с MyKey = "Computer\" & MyKey (удалите строку My).Для немецкой Windows XP строка "My Computer\" должен быть заменен на "Arbeitsplatz\".

Вариант 2
Регджампинг из Sysinternals.com

Этот небольшой апплет командной строки принимает путь к реестру и открывает Regedit по этому пути.Он принимает корневые ключи в стандартном формате (напримерHKEY_LOCAL_MACHINE) и сокращенная форма (например,HKLM).

Использование:повторный переход [путь]

Пример: C:\Regjump HKEY_CLASSES_ROOT\.mp3

Вариант 3
12 Хостов прыгают с 12ghosts.com

Перейдите к разделам реестра с помощью значка в трее!Это удивительно полезный инструмент.Вы можете управлять разделами реестра, к которым часто обращаются, и напрямую переходить к ним.Неограниченный размер списка, переход к ключам и значениям, получение текущего ключа одним щелчком мыши, переход к ключу в буфере обмена, переход к тому же ключу in в HKCU или HKLM.Управляйте ключами с комментариями и сортируйте их в удобном меню значков в трее.Создайте ярлыки для разделов реестра.

Я также хотел бы отметить, что вы можете просматривать и редактировать реестр из PowerShell.Запустите его и используйте set-location, чтобы открыть папку реестра по вашему выбору.Краткое имя HKEY используется как буква диска в файловой системе (поэтому, чтобы перейти к HKEY_LOCAL_MACHINE\Software, вы бы сказали:установить местоположение hklm:\Программное обеспечение).

Более подробную информацию об управлении реестром в PowerShell можно найти, набрав get-help Registry в командной строке PowerShell.

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

Он также устанавливает строковое значение LastKey обновляется самим Regedit при каждом выходе, чтобы показывать после запуска тот же ключ, что и при последнем выходе.

@echo off
setlocal EnableDelayedExpansion
set "RootName=Computer"

if not "%~1"=="" (
    set "RegKey=%~1"
    goto PrepareKey
)

echo/
echo Please enter the path of the registry key to open.
echo/
set "RegKey="
set /P "RegKey=Key path: "

rem Exit batch file without starting Regedit if nothing entered by user.
if "!RegKey!"=="" goto ExitBatch

:PrepareKey
rem Remove square brackets and double quotes from entered key path.
set "RegKey=!RegKey:"=!"
if "!RegKey!"=="" goto ExitBatch
set "RegKey=!RegKey:[=!"
if "!RegKey!"=="" goto ExitBatch
set "RegKey=!RegKey:]=!"
if "!RegKey!"=="" goto ExitBatch

rem Replace hive name abbreviation by appropriate long name.
set "Abbreviation=%RegKey:~0,4%"
if /I "%Abbreviation%"=="HKCC" (
    set "RegKey=HKEY_CURRENT_CONFIG%RegKey:~4%"
    goto GetRootName
)
if /I "%Abbreviation%"=="HKCR" (
    set "RegKey=HKEY_CLASSES_ROOT%RegKey:~4%"
    goto GetRootName
)
if /I "%Abbreviation%"=="HKCU" (
    set "RegKey=HKEY_CURRENT_USER%RegKey:~4%"
    goto GetRootName
)
if /I "%Abbreviation%"=="HKLM" (
    set "RegKey=HKEY_LOCAL_MACHINE%RegKey:~4%"
    goto GetRootName
)
if /I "%RegKey:~0,3%"=="HKU" (
    set "RegKey=HKEY_USERS%RegKey:~3%"
)

:GetRootName
rem Try to determine automatically name of registry root.
for /F "tokens=1,2*" %%K in ('%SystemRoot%\System32\reg.exe query "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit" /v "LastKey"') do (
    if /I "%%K"=="LastKey" (
        for /F "delims=\" %%N in ("%%M") do set "RootName=%%N"
    )
)

rem Is Regedit already running?
%SystemRoot%\System32\tasklist.exe | %SystemRoot%\System32\findstr.exe /B /I /L regedit.exe >nul
if errorlevel 1 goto SetRegPath

echo/
echo Regedit is already running. Path can be set only when Regedit is not running.
echo/
set "Choice=N"
set /P "Choice=Kill Regedit (y/N): "
if /I "!Choice!"=="y" (
    %SystemRoot%\System32\taskkill.exe /IM regedit.exe >nul 2>nul
    goto SetRegPath
)
echo Switch to running instance of Regedit without setting entered path.
goto StartRegedit

:SetRegPath
rem Add this key as last key to registry for Regedit.
%SystemRoot%\System32\reg.exe add "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit" /v "LastKey" /d "%RootName%\%RegKey%" /f >nul 2>nul

:StartRegedit
start /B regedit.exe

:ExitBatch
endlocal

Эти усовершенствования заключаются в следующем:

  1. Путь к реестру также может быть передан пакетному скрипту в качестве параметра командной строки.

  2. Путь к реестру можно ввести или вставить с двойными кавычками или без них.

  3. Путь к реестру может быть введен, вставлен или передан в качестве параметра с квадратными скобками или без них.

  4. Путь к реестру может быть введен, вставлен или передан в качестве параметра также с сокращенным именем улья (HKCC, HKCU, HKCR, HKLM, HKU).

  5. Пакетный скрипт проверяет наличие уже запущенного Regedit, поскольку раздел реестра не отображается при запуске Regedit, в то время как Regedit уже запущен.Пакетного пользователя спрашивают, следует ли уничтожить запущенный экземпляр, чтобы перезапустить его, чтобы показать введенный путь к реестру.Если пакетный пользователь решает не отключать Regedit, Regedit запускается без установки введенного пути, что приводит (обычно) к простому выводу окна Regedit на передний план.

  6. Пакетный файл пытается автоматически получить имя корня реестра, которое находится в английской Windows XP Мой компьютер, в немецкой Windows XP, Arbeitsplatz, а в Windows 7 просто Компьютер.Это может привести к сбою, если значение LastKey regedit отсутствует или пуст в реестре.Для этого случая, пожалуйста, установите правильное имя root в третьей строке пакетного кода.

Скопируйте приведенный ниже текст, сохраните его в виде пакетного файла и запустите

@ECHO OFF
SET /P "showkey=Please enter the path of the registry key: "
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit" /v "LastKey" /d "%showkey%" /f
start "" regedit

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

Я подумал, что это решение на C # может помочь:

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

В этом примере пункт меню "Настройки реестра" открывает RegEdit для узла для программы, которая его вызвала.

Форма программы:

    private void registrySettingsToolStripMenuItem_Click(object sender, EventArgs e)
    {
        string path = string.Format(@"Computer\HKEY_CURRENT_USER\Software\{0}\{1}\",
                                    Application.CompanyName, Application.ProductName);

        MyCommonFunctions.Registry.OpenToKey(path);

    }

Мои общие функции.Реестр

    /// <summary>Opens RegEdit to the provided key
    /// <para><example>@"Computer\HKEY_CURRENT_USER\Software\MyCompanyName\MyProgramName\"</example></para>
    /// </summary>
    /// <param name="FullKeyPath"></param>
    public static void OpenToKey(string FullKeyPath)
    {
        RegistryKey rKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Applets\Regedit", true);
        rKey.SetValue("LastKey",FullKeyPath);

        Process.Start("regedit.exe");
    }

Конечно, вы могли бы поместить все это в один метод формы, но мне нравится возможность повторного использования.

Создайте BAT-файл, используя clipboard.exe и regjump.exe для перехода к клавише в буфере обмена:

clipboard.exe > "%~dp0clipdata.txt"
set /p clipdata=input < "%~dp0clipdata.txt"
regjump.exe %clipdata%

( %~dp0 означает "путь к BAT-файлу" )

Опираясь на ответ лайонкинграфики, вот более надежное решение, которое примет путь к ключу reg в качестве аргумента и автоматически переведет HKLM в HKEY_LOCAL_MACHINE или аналогичный по мере необходимости.Если аргументов нет, скрипт проверяет буфер обмена, используя htmlfile COM-объект, вызываемый Гибридная химера JScript.Скопированные данные будут разделены и помечены, поэтому не имеет значения, обрезаны ли они или даже среди целого абзаца скопированной информации.И, наконец, существование ключа проверяется перед тем, как LastKey модифицируется.Пути к ключам, содержащие пробелы, должны заключаться в двойные кавычки.

@if (@CodeSection == @Batch) @then
:: regjump.bat
@echo off & setlocal & goto main

:usage
echo Usage:
echo   * %~nx0 regkey
echo   * %~nx0 with no args will search the clipboard for a reg key
goto :EOF

:main
rem // ensure variables are unset
for %%I in (hive query regpath) do set "%%I="

rem // if argument, try navigating to argument.  Else find key in clipboard.
if not "%~1"=="" (set "query=%~1") else (
    for /f "delims=" %%I in ('cscript /nologo /e:JScript "%~f0"') do (
        set "query=%%~I"
    )
)

if not defined query (
    echo No registry key was found in the clipboard.
    goto usage
)

rem // convert HKLM to HKEY_LOCAL_MACHINE, etc. while checking key exists
for /f "delims=\" %%I in ('reg query "%query%" 2^>NUL') do (
    set "hive=%%~I" & goto next
)

:next
if not defined hive (
    echo %query% not found in the registry
    goto usage
)

rem // normalize query, expanding HKLM, HKCU, etc.
for /f "tokens=1* delims=\" %%I in ("%query%") do set "regpath=%hive%\%%~J"
if "%regpath:~-1%"=="\" set "regpath=%regpath:~0,-1%"

rem // https://stackoverflow.com/a/22697203/1683264
>NUL 2>NUL (
    REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit"^
        /v "LastKey" /d "%regpath%" /f
)

echo %regpath%

start "" regedit
goto :EOF

@end // begin JScript hybrid chimera
// https://stackoverflow.com/a/15747067/1683264
var clip = WSH.CreateObject('htmlfile').parentWindow.clipboardData.getData('text');

clip.replace(/"[^"]+"|\S+/g, function($0) {
    if (/^\"?(HK[CLU]|HKEY_)/i.test($0)) {
        WSH.Echo($0);
        WSH.Quit(0);
    }
});

Вот простая функция PowerShell, основанная на приведенном выше ответе https://stackoverflow.com/a/12516008/1179573

function jumpReg ($registryPath)
{
    New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit" `
                     -Name "LastKey" `
                     -Value $registryPath `
                     -PropertyType String `
                     -Force

    regedit
}

jumpReg ("Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run") | Out-Null

Приведенный выше ответ на самом деле не очень хорошо объясняет, что он делает.Когда вы закрываете RegEdit, он сохраняет вашу последнюю известную позицию в HKCU:\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit, таким образом, это просто заменяет последнюю известную позицию на ту, куда вы хотите прыгнуть, а затем открывает ее.

Это кажется ужасно устаревшим, но Ключи командной строки редактора регистрационной информации (REGEDIT) утверждает , что это не делает поддержите это.

Вы можете сделать так, чтобы это выглядело так, как будто regedit выполняет это поведение, создав пакетный файл (из уже предоставленных материалов), но назовите его regedit.bat и поместите в папку C:\WINDOWS\system32.(вы можете захотеть, чтобы он пропустил редактирование последнего ключа в реестре, если аргументы командной строки не указаны, поэтому "regedit" сам по себе работает так, как regedit всегда делал) Затем "regedit HKEY_CURRENT_USER\Software \ Microsoft \ VisualStudio \ 8.0" сделает то, что вы хотите.

При этом используется тот факт, что порядок в PATH обычно равен C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;и т.д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top