无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 2243|回复: 16
打印 上一主题 下一主题

[求助] 求一个批处理提取注册表项值(变动的)并替换某个注册表文件的固定项值

[复制链接]
跳转到指定楼层
1#
发表于 2023-10-5 18:28:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
批处理如何达到下列目的。

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
未替换文件

2#
发表于 2023-10-5 18:44:48 来自手机 | 只看该作者
换个思路,这是用户的SID,无论是当前用户在线还是离线还是每个账户的默认值都能改,不用改这里。
回复

使用道具 举报

3#
发表于 2023-10-5 18:45:55 | 只看该作者
其实HKEY_USERS\S-1-5-21-2076627341-80653777-2894816030-500等于HKEY_CURRENT_USER

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

给你提供个参考方向

点评

我试试看改下注册表看看能不能成功  详情 回复 发表于 2023-10-5 19:09
回复

使用道具 举报

4#
发表于 2023-10-5 18:49:52 | 只看该作者
等高人指点
回复

使用道具 举报

5#
 楼主| 发表于 2023-10-5 19:09:40 | 只看该作者
kli 发表于 2023-10-5 18:45
其实HKEY_USERS\S-1-5-21-2076627341-80653777-2894816030-500等于HKEY_CURRENT_USER

对HKEY_CURRENT_US ...

我试试看改下注册表看看能不能成功
回复

使用道具 举报

6#
 楼主| 发表于 2023-10-5 19:16:17 | 只看该作者
谢谢,改注册表文件里HKEY_USERS\S-1-5-21-*******为HKEY_CURRENT_USER,成功达到目的。

点评

恭喜恭喜问题解决  详情 回复 发表于 2023-10-5 19:21
回复

使用道具 举报

7#
发表于 2023-10-5 19:21:00 | 只看该作者
xiao75918 发表于 2023-10-5 19:16
谢谢,改注册表文件里HKEY_USERS\S-1-5-21-*******为HKEY_CURRENT_USER,成功达到目的。

恭喜恭喜问题解决
回复

使用道具 举报

8#
发表于 2023-10-5 20:46:01 | 只看该作者
123哪一项没完成?
回复

使用道具 举报

9#
发表于 2023-10-5 21:07:00 | 只看该作者
很繁琐啊,获取SID只需一行代码即可:
  1. for /f "skip=6 tokens=2" %%a in ('whoami /user') do (set "usid=%%~a")
复制代码

点评

我用的也是 WHOAMI:  详情 回复 发表于 2023-10-5 21:27
回复

使用道具 举报

10#
发表于 2023-10-5 21:27:42 | 只看该作者
2010hook 发表于 2023-10-5 21:07
很繁琐啊,获取SID只需一行代码即可:

我用的也是 WHOAMI:

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

评分

参与人数 1无忧币 +1 收起 理由
2010hook + 1 加个参数更好用

查看全部评分

回复

使用道具 举报

11#
发表于 2023-10-5 21:30:12 | 只看该作者
路过学习了
回复

使用道具 举报

12#
发表于 2023-10-5 23:06:36 | 只看该作者
学习了
回复

使用道具 举报

13#
发表于 2023-10-5 23:51:17 | 只看该作者
学习了
回复

使用道具 举报

14#
发表于 2023-10-6 13:06:56 | 只看该作者
谢谢分享
回复

使用道具 举报

15#
 楼主| 发表于 2023-10-8 16:29: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,
回复

使用道具 举报

16#
发表于 2024-2-25 09:53:29 | 只看该作者
谢谢分享
回复

使用道具 举报

17#
发表于 2024-2-26 07:30:23 | 只看该作者
学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-29 00:41

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表