Как запустить Windows RegEdit с определенным путем? - PullRequest
37 голосов
/ 26 сентября 2008

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

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

Ответы [ 12 ]

29 голосов
/ 26 сентября 2008

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

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

26 голосов
/ 20 сентября 2012

Используйте следующий пакетный файл (добавьте к 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

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

5 голосов
/ 26 сентября 2008

С 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
Regjump от Sysinternals.com

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

Использование: regjump [путь]

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

Вариант 3
12Ghosts JumpReg от 12ghosts.com

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

4 голосов
/ 14 марта 2015

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

Он также устанавливает строковое значение 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 отсутствует или пусто в реестре. Для этого случая укажите правильное имя корня в третьей строке кода пакета.

4 голосов
/ 26 сентября 2008

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

Подробнее об управлении реестром в PowerShell можно узнать, набрав get-help Registry в командной строке PowerShell.

3 голосов
/ 27 марта 2014

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

@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 открывает ключ, определенный в этом значении.

2 голосов
/ 19 января 2013

Я думал, что это решение 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);

    }

MyCommonFunctions.Registry

    /// <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");
    }

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

1 голос
/ 11 апреля 2017

Вот простая функция 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, поэтому она просто заменяет последнюю известную позицию на то, куда вы хотите перейти, а затем открывает ее.

1 голос
/ 16 февраля 2016

Основываясь на ответе lionkingrafiki , вот более надежное решение, которое примет путь к ключу reg в качестве аргумента и автоматически переведет HKLM в HKEY_LOCAL_MACHINE или аналогичный при необходимости. Если аргумент отсутствует, скрипт проверяет буфер обмена, используя COM-объект htmlfile, вызываемый гибридной химерой 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);
    }
});
1 голос
/ 04 октября 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...