web-dev-qa-db-fra.com

Comment lancer RegEdit de Windows avec un certain chemin?

Comment lancer Windows ' RegEdit avec un certain chemin situé, comme "HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0", afin de ne pas avoir à cliquer?

Quel est l'argument en ligne de commande pour faire cela? Ou y a-t-il un endroit où trouver l'explication des commutateurs RegEdit?

37
XTL

Il existe un programme appelé RegJump , de Mark Russinovich, qui fait exactement ce que vous voulez. Il va lancer regedit et le déplacer vers la clé souhaitée depuis la ligne de commande.

RegJump utilise (ou du moins, l'habitude d'utiliser) la même fenêtre regedit à chaque appel. Ainsi, si vous souhaitez ouvrir plusieurs sessions regedit, vous devrez toujours faire les choses à l'ancienne pour tous, sauf celui que RegJump a adopté. Une mise en garde mineure, mais une note à garder de toute façon.

29
Chris Charabaruk

Utilisez le fichier de commandes suivant (ajouter à 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

remplacer:

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

avec votre chemin de registre.

26
Byron Persino

De http://windowsxp.mvps.org/jumpreg.htm (je n'ai essayé aucune de ces solutions):

Lorsque vous démarrez Regedit, la dernière clé visualisée s’ouvre automatiquement. (L'éditeur de registre sous Windows XP enregistre la dernière clé de registre visualisée dans un emplacement séparé). Si vous souhaitez accéder directement à une clé de registre particulière sans naviguer manuellement dans les chemins, vous pouvez utiliser l'une de ces méthodes/outils.

Option 1
Utilisation d’un script VBScript: Copiez ces lignes dans un document du bloc-notes sous le nom save as 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

Double-cliquez sur Registry.vbs, puis tapez le chemin d'accès complet du registre que vous souhaitez ouvrir.

Exemple: HKEY_CLASSES_ROOT\.MP3

Limitation: la méthode ci-dessus n'aide pas si Regedit est déjà ouvert.

Remarque: Sous Windows 7, vous devez remplacer la ligne MyKey = "My Computer\" & MyKey par MyKey = "Computer\" & MyKey (supprimez la chaîne My). Pour un Windows allemand XP, la chaîne "My Computer\" doit être remplacée par "Arbeitsplatz\".

Option 2
Regjump de Sysinternals.com

Cette petite applet de ligne de commande utilise un chemin de registre et ouvre Regedit à ce chemin. Il accepte les clés racine sous forme standard (par exemple, HKEY_LOCAL_MACHINE) et sous une forme abrégée (par exemple, HKLM). 

Utilisation: regjump [chemin]

Exemple: C:\Regjump HKEY_CLASSES_ROOT\.mp3

Option 3
12Ghosts JumpReg à partir de 12ghosts.com

Accédez aux clés de registre à partir d'une icône de barre d'état! C'est un outil étonnamment utile. Vous pouvez gérer et accéder directement aux clés de registre fréquemment utilisées. Taille de liste illimitée, accès aux clés et aux valeurs, affichage de la clé en un clic, sélection du presse-papiers, sélection des clés dans HKCU ou HKLM Gérez et triez les clés avec des commentaires dans un menu facile à utiliser. Créez des raccourcis pour les clés de registre.

5
The Hoss

J'aimerais également noter que vous pouvez afficher et modifier le registre à partir de PowerShell. Lancez-le et utilisez set-location pour ouvrir l’emplacement de registre de votre choix. Le nom abrégé d'un HKEY est utilisé comme une lettre de lecteur dans le système de fichiers (pour accéder à HKEY_LOCAL_MACHINE\Software, vous diriez donc: set-location hklm:\Software).

Vous trouverez plus de détails sur la gestion du registre dans PowerShell en tapant get-help Registry à l'invite de la commande PowerShell.

4
Chris Charabaruk

Voici une autre solution de fichier de traitement par lot avec plusieurs améliorations par rapport aux autres solutions de traitement par lot publiées ici.

Il définit également la valeur de chaîne LastKey mise à jour par Regedit lui-même à chaque sortie à afficher après le démarrage de la même clé que lors de la dernière sortie.

@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

Les améliorations sont les suivantes:

  1. Le chemin du registre peut également être transmis en tant que paramètre de ligne de commande au script batch.

  2. Le chemin du registre peut être entré ou collé avec ou sans guillemets.

  3. Le chemin du registre peut être entré ou collé ou passé en paramètre avec ou sans crochets.

  4. Le chemin du registre peut être entré, collé ou passé en paramètre avec un nom abrégé Hive (HKCC, HKCU, HKCR, HKLM, HKU).

  5. Le script de traitement par lots vérifie si Regedit est déjà en cours d'exécution car la clé de registre n'est pas affichée au démarrage de Regedit alors que Regedit est déjà en cours d'exécution. Il est demandé à l'utilisateur du traitement par lots si l'instance en cours d'exécution doit être supprimée pour la redémarrer afin d'afficher le chemin d'accès au registre entré. Si l'utilisateur du traitement par lots choisit de ne pas supprimer Regedit, Regedit est démarré sans définir de chemin d'accès, ce qui entraîne (généralement) uniquement le fait d'afficher la fenêtre Regedit au premier plan.

  6. Le fichier de commandes tente d'obtenir automatiquement le nom de la racine du registre sous Windows XP anglais Poste de travail, sous Windows XP allemand, Arbeitsplatz et sous Windows 7, juste Ordinateur. Cela pourrait échouer si la valeur LastKey de Regedit est manquante ou vide dans le registre. Dans ce cas, indiquez le nom de racine correct dans la troisième ligne du code de lot.

4
Mofi

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

@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

Tous les sujetsEnter, Regedit открывает ключ, определенный в этом значении.

3
thelionkingrafiki

Je pensais que cette solution C # pourrait aider:

En utilisant une suggestion antérieure, nous pouvons amener RegEdit à ouvrir la clé souhaitée, même si nous ne pouvons pas la définir comme paramètre.

Dans cet exemple, une option de menu de "Paramètres du registre" ouvre RegEdit au nœud du programme qui l'a appelé.

Formulaire du programme:

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

Bien sûr, vous pouvez mettre tout cela dans une méthode du formulaire, mais j'aime bien la réutilisabilité.

2
Clint StLaurent

Voici une fonction PowerShell simple basée sur la réponse ci-dessus 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

La réponse ci-dessus n’explique pas très bien ce qu’elle fait. Lorsque vous fermez RegEdit, il enregistre votre dernière position connue dans HKCU:\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit. Elle remplace donc simplement la dernière position connue par celle à laquelle vous souhaitez sauter, puis l'ouvre.

1
Alex Kwitny

En se basant sur la réponse de lionkingrafiki , voici une solution plus robuste qui acceptera un chemin de clé de registre comme argument et traduira automatiquement HKLM en HKEY_LOCAL_MACHINE ou similaire, selon les besoins. En l'absence d'argument, le script vérifie le Presse-papiers à l'aide de l'objet COM htmlfile appelé par une chimère hybride JScript . Les données copiées seront divisées et marquées en jetons. Par conséquent, peu importe si elles ne sont pas réduites ou même entre un paragraphe entier de la saleté copiée. Et enfin, l'existence de la clé est vérifiée avant que LastKey ne soit modifié. Les chemins de clés contenant des espaces doivent être entre guillemets doubles.

@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
rojo

Créez un fichier BAT en utilisant clipboard.exe et regjump.exepour accéder à la clé du presse-papiers:

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

(% ~ dp0 signifie "le chemin du fichier BAT")

1
Jack

Vous pouvez donner l’impression que regedit a ce comportement en créant un fichier de commandes (à partir des soumissions déjà fournies) mais appelez-le regedit.bat et placez-le dans le dossier C:\WINDOWS\system32. (vous voudrez peut-être ignorer la modification de la lastkey dans le registre si aucun argument de ligne de commande n'est donné, donc "regedit" fonctionne comme regedit l'a toujours fait) tu veux.

Cela utilise le fait que l'ordre dans PATH est généralement C:\WINDOWS\system32; C:\WINDOWS; C:\WINDOWS\System32\Wbem; etc

0
martski

Cela semble terriblement obsolète, mais Les commutateurs de ligne de commande de l'éditeur d'informations d'enregistrement (REGEDIT) affirme que ne le supporte pas.

0
Simon Buchan