无忧启动论坛

标题: 求一个批处理提取注册表项值(变动的)并替换某个注册表文件的固定项值 [打印本页]

作者: xiao75918    时间: 2023-10-5 18:28
标题: 求一个批处理提取注册表项值(变动的)并替换某个注册表文件的固定项值
批处理如何达到下列目的。

1、复制当前目录下的newfile.reg文件到c:\windows\temp下面。

2、提取当前电脑windows系统注册表中HKEY_USERS\S-1-5-21-后面的数字(如HKEY_USERS\S-1-5-21-2076627341-80653777-2894816030-500),
每台电脑不同系统上的数字都不相同,但开头的S-1-5-21-与后面的-500是不变的,中间的三组数字是变动未知的。
用上面提取的注册表项值替换c:\windows\temp\newfile.reg里所有S-1-5-21-3841323753-2782592192-1186232292-500字符(这个项值是不变的),保存。

3、运行c:\windows\temp\newfile.reg,完成后删除此c:\windows\temp\newfile.reg文件。

ai生成的批处理出错。

@echo off
rem 复制文件到C:\Windows\Temp
xcopy /Y "newfile.reg" "C:\Windows\Temp"

rem 打开注册表并提取所需字符串
for /f "tokens=1-6 delims=-" %%a in ('reg query "HKEY_USERS\S-1-5-21-" /s ^| findstr /i "HKEY_USERS\S-1-5-21-"') do (
    set "newid=%%a-%%b-%%c-%%d-%%e-%%f"
)
rem 替换文件中的字符串并保存
for /f "tokens=1-6 delims=-" %%a in ('type temp.txt') do (
    set "newid=%%a-%%b-%%c-%%d-%%e-%%f"
)
findstr /i /c:"HKEY_USERS\S-1-5-21-" "C:\Windows\Temp\newfile.reg" | findstr /r "HKEY_USERS\S-\d-\d\d-" | replace /i "HKEY_USERS\S-1-5-21-" "HKEY_USERS\%newid%" "C:\Windows\Temp\newfile.reg"

pause

复制了1个文件
错误:系统找不到指定的注册表项或值
无效的开关 -/i
未替换文件


作者: nttwqz    时间: 2023-10-5 18:44
换个思路,这是用户的SID,无论是当前用户在线还是离线还是每个账户的默认值都能改,不用改这里。
作者: kli    时间: 2023-10-5 18:45
其实HKEY_USERS\S-1-5-21-2076627341-80653777-2894816030-500等于HKEY_CURRENT_USER

对HKEY_CURRENT_USER相关项的修改会体现在HKEY_USERS\xxxx上(当前登录用户的随机id)

给你提供个参考方向
作者: awan8850    时间: 2023-10-5 18:49
等高人指点
作者: xiao75918    时间: 2023-10-5 19:09
kli 发表于 2023-10-5 18:45
其实HKEY_USERS\S-1-5-21-2076627341-80653777-2894816030-500等于HKEY_CURRENT_USER

对HKEY_CURRENT_US ...

我试试看改下注册表看看能不能成功
作者: xiao75918    时间: 2023-10-5 19:16
谢谢,改注册表文件里HKEY_USERS\S-1-5-21-*******为HKEY_CURRENT_USER,成功达到目的。
作者: yyz2191958    时间: 2023-10-5 19:21
xiao75918 发表于 2023-10-5 19:16
谢谢,改注册表文件里HKEY_USERS\S-1-5-21-*******为HKEY_CURRENT_USER,成功达到目的。

恭喜恭喜问题解决
作者: szwp    时间: 2023-10-5 20:46
123哪一项没完成?
作者: 2010hook    时间: 2023-10-5 21:07
很繁琐啊,获取SID只需一行代码即可:
  1. for /f "skip=6 tokens=2" %%a in ('whoami /user') do (set "usid=%%~a")
复制代码

作者: magicgenius    时间: 2023-10-5 21:27
2010hook 发表于 2023-10-5 21:07
很繁琐啊,获取SID只需一行代码即可:

我用的也是 WHOAMI:

  1. for /f "tokens=1,*" %%i in ('WHOAMI /USER /NH') do set SID=%%j
复制代码


作者: martin313    时间: 2023-10-5 21:30
路过学习了
作者: yc2428    时间: 2023-10-5 23:06
学习了
作者: nathan6498    时间: 2023-10-5 23:51
学习了
作者: nathan6498    时间: 2023-10-6 13:06
谢谢分享
作者: xiao75918    时间: 2023-10-8 16:29
求大佬指点:
以下两段批处理,1运行不能创建快捷键,2运行可以创建快捷键,是什么原因造成的。
批处理1
@echo off
set "StartMenuPATH=%AllUsersProfile%\Microsoft\Windows\Start Menu\Programs\CorelDRAW Graphics Suite X7 (64-bit)"
IF NOT EXIST "%StartMenuPATH%\" MD "%StartMenuPATH%"
set "UserDesktop=C:\Users\Public\Desktop"
set "Program1=Program Files\Corel\CorelDRAW X7\Programs64\CorelDRW.exe"
set "shortcutname1=CorelDRAW X7 (64-Bit).lnk"
set "drives=C D E"
for %%d in (%drives%) do (
     IF EXIST "%%%d:\%Program1%" (
        Shortcut.exe /F:"%userDesktop%\%shortcutname1%" /A:C /D:"" /T:"%%d:\%Program1%">nul
        Shortcut.exe /F:"%StartMenuPATH%\%shortcutname1%" /A:C /D:"" /T:"%%d:\%Program1%">nul


exit /b


批处理2
@echo off
set "StartMenuPATH=%AllUsersProfile%\Microsoft\Windows\Start Menu\Programs\CorelDRAW Graphics Suite X7 (64-bit)"
IF NOT EXIST "%StartMenuPATH%\" MD "%StartMenuPATH%"
SET "UserDesktop=C:\Users\Public\Desktop"
SET "Program1=Program Files\Corel\CorelDRAW X7\Programs64\CorelDRW.exe"
set "shortcutname1=CorelDRAW X7 (64-Bit).lnk"
IF EXIST "c:\%Program1%" Shortcut.exe /F:"%UserDesktop%\%shortcutname1%" /A:C /D:"" /T:"c:\%Program1%">nul
IF EXIST "c:\%Program1%" Shortcut.exe /F:"%StartMenuPATH%\%shortcutname1%" /A:C /D:"" /T:"c:\%Program1%">nul

IF EXIST "d:\%Program1%" Shortcut.exe /F:"%UserDesktop%\%shortcutname1%" /A:C /D:"" /T:"d:\%Program1%">nul
IF EXIST "d:\%Program1%" Shortcut.exe /F:"%StartMenuPATH%\%shortcutname1%" /A:C /D:"" /T:"d:\%Program1%">nul

IF EXIST "e:\%Program1%" Shortcut.exe /F:"%UserDesktop%\%shortcutname1%" /A:C /D:"" /T:"e:\%Program1%">nul
IF EXIST "e:\%Program1%" Shortcut.exe /F:"%StartMenuPATH%\%shortcutname1%" /A:C /D:"" /T:"e:\%Program1%">nul

exit /b


批处理3

想求个能达到以下功能的批处理:对注册表文件dreg.reg(文件比较大)里的所含相同字符进行替换并保存文件为ereg.reg

注册表文件dreg.reg有原有5段字符
(1)  d:\\Program Files\\Corel\\CorelDRAW X7\\
(2)  d?\\Program Files\\Corel\\CorelDRAW X7\\
(3)  d:|Program Files|Corel|CorelDRAW X7|
(4)  :6E,00,3B,00,31,00,3B,00,64,00,3A,00,5C,00,70,00,
(5)  :64,00,3A,00,5C,00,70,00,72,00,6F,00,67,00,72,00,

要依次替换的字符段
(1)  e:\\Program Files\\Corel\\CorelDRAW X7\\
(2)  e?\\Program Files\\Corel\\CorelDRAW X7\\
(3)  e:|Program Files|Corel|CorelDRAW X7|
(4)  :6E,00,3B,00,31,00,3B,00,65,00,3A,00,5C,00,70,00,
(5)  :65,00,3A,00,5C,00,70,00,72,00,6F,00,67,00,72,00,
作者: 无犹启动    时间: 2024-2-25 09:53
谢谢分享
作者: 无犹启动    时间: 2024-2-26 07:30
学习了




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3