批处理编写以及修改注册表

批处理修改注册表

1、批处理注释

以下内容摘抄至 https://blog.csdn.net/wh_19910525/article/details/8125762

在批处理中**,段注释**有一种比较常用的方法:

  goto start
   = 可以是多行文本,可以是命令
   = 可以包含重定向符号和其他特殊字符
   = 只要不包含 :start 这一行,就都是注释
  :start

另外,还有 其他各种注释形式,比如:

1、:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)
2、rem 注释内容(不能出现重定向符号和管道符号)
3、echo 注释内容(不能出现重定向符号和管道符号)〉nul
4、if not exist nul 注释内容(不能出现重定向符号和管道符号)
5、:注释内容(注释文本不能与已有标签重名)
6、%注释内容%(可以用作行间注释,不能出现重定向符号和管道符号)
7、goto 标签 注释内容(可以用作说明goto的条件和执行内容)
8、:标签 注释内容(可以用作标签下方段的执行内容)

2、批处理数组的使用

类似C语言中的数组,直接初始化

set Domain[0]=sopsa.bocsys.cn
set Domain[1]=ssop2.bocsys.cn
set Domain[2]=ssop.bocsys.cn
set Domain[3]=ssopomriis.p.bocsys.cn
set Domain[4]=vatims-vims.p.bocsys.cn
set Domain[5]=imse.bank-of-china.com
set Domain[6]=iccd-dapvip1.p.bocsys.cn
set Domain[7]=gms.bocsys.cn
set Domain[8]=e.bocsys.cn

数组大小长度的统计,如下脚本

set "x=0" 
:GetSumLoop 

if defined Domain[%x%] ( 
   rem call echo %%Domain[%x%]%% 
   set /a "x+=1"
   GOTO :GetSumLoop 
)
rem echo %x%
set /a DomainSize="x"

3、批处理获取用户sessionid

for /f "skip=1" %%a in ('quser') do set curuser=%%a
set curuser=%curuser:~1%

for /f "delims=" %%a in ('wmic userAccount where "Name='%curuser%'" get SID /value') do call set %%a >nul
set "SID=%SID: =%"

4、批处理注册表操作

REG QUERY "%sRegPath%\!regKeyItem!" >nul 2>&1
REG ADD "%sRegPath%\!regKeyItem!\!regSubKeyItem!" >nul 2>&1
REG ADD "%sRegPath%\!regKeyItem!\!regSubKeyItem!" /v http /t REG_DWORD /d 1 /f >nul 2>&1
REG ADD "%sRegPath%\!regKeyItem!\!regSubKeyItem!" /v https /t REG_DWORD /d 1 /f >nul 2>&1

5、延迟变量

可以参见https://www.cnblogs.com/habibah-chang/p/3532125.html

延迟变量只会应用在复合语句中,例如for循环中的(),if条件语句中的(),延迟变量的意思就是延迟读取变量值,否则读取的是变量的初始值。

在批处理中开启或关闭延迟环境变量用setlocal命令:

setlocal EnableDelayedExpansion //开启延迟环境变量

setlocal DisableDelayedExpansion //关闭延迟环境变量

6、完整代码

@echo off
REM 声明采用UTF-8编码
rem chcp 65001 >nul 2>&1



set Domain[0]=sopsa.bocsys.cn
set Domain[1]=ssop2.bocsys.cn
set Domain[2]=ssop.bocsys.cn
set Domain[3]=ssopomriis.p.bocsys.cn
set Domain[4]=vatims-vims.p.bocsys.cn
set Domain[5]=imse.bank-of-china.com
set Domain[6]=iccd-dapvip1.p.bocsys.cn
set Domain[7]=gms.bocsys.cn
set Domain[8]=e.bocsys.cn

set regKeyItem=
set regSubKeyItem=
set nCount=0
set valuedot=.
set nIndex=0
set nStartIndex=0
set sRegPath=
set sValueSite=

setlocal enabledelayedexpansion
echo IE config start

for /f "skip=1" %%a in ('quser') do set curuser=%%a
set curuser=%curuser:~1%


for /f "delims=" %%a in ('wmic userAccount where "Name='%curuser%'" get SID /value') do call set %%a >nul
set "SID=%SID: =%"

set "sRegPath=HKEY_USERS\%SID%\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains"
echo %sRegPath%
REG QUERY "%sRegPath%" >nul 2>&1
if errorlevel==1 (
	echo reg path error.
	goto endproc
	) 

set "x=0" 
:GetSumLoop 

if defined Domain[%x%] ( 
   rem call echo %%Domain[%x%]%% 
   set /a "x+=1"
   GOTO :GetSumLoop 
)
rem echo %x%
set /a DomainSize="x"

set sum=0
:recycleLoop
rem echo "nStartIndex=!nStartIndex!"
for /L %%n in (!nStartIndex!,1,!DomainSize!) do (
	set /a nStartIndex=%nStartIndex+1
	set  sValueSite=!Domain[%%n]!
	set  valueString=!Domain[%%n]!
	set  ValueTemp=!Domain[%%n]!

	rem 初始化sum,记录每个site分割子串长度
	set "sum=0"
	rem 计算分割词总数
	:split
	for /f "tokens=1,* delims=." %%i in ("!valueString!") do (
		set /a sum=%sum+1
		set "valueString=%%j"
	)
	if not "!valueString!"=="" goto split

	rem echo "sum=!sum!"
	set "nCount=0"
	rem 字符串分割位置索引 aa.bb.cc.dd, nIndex为regSubKeyItem的截止位置,nStart为regKeyItem的开始位置
	set /a nIndex=!sum!-2
	set /a nStart=%nIndex%+1
	rem 开启变量延迟扩展
	setlocal enabledelayedexpansion
	set "regSubKeyItem=" 
	set "regKeyItem="
	rem 取项regKeyItem与子项regSubKeyItem
	:getItem
	for /f "tokens=1,* delims=." %%i in ("!ValueTemp!") do (
		set /a nCount=%nCount+1
		if !nCount! LSS !nIndex! set "regSubKeyItem=!regSubKeyItem!%%i!valuedot!"
		if !nCount! EQU !nIndex! set "regSubKeyItem=!regSubKeyItem!%%i"
		if !nCount! EQU !nStart! set "regKeyItem=!regKeyItem!%%i"
		if !nCount! GTR !nStart! set "regKeyItem=!regKeyItem!!valuedot!%%i"
		set "ValueTemp=%%j"
	)
	if not "!ValueTemp!"=="" goto getItem

	rem 执行注册表写入操作,判断regKeyItem是否存在
	if not "!regKeyItem!"=="" (
		REG QUERY "%sRegPath%\!regKeyItem!" >nul 2>&1
		if errorlevel==1 (
			REG ADD "%sRegPath%\!regKeyItem!" >nul 2>&1
			rem 查询项不存在
			if errorlevel==1 (
				echo "reg add %sRegPath%\!regKeyItem! error"
			) else if errorlevel==0 (
				rem 判断子项是否存在
				if not "!regSubKeyItem!"=="" (
					REG QUERY "%sRegPath%\!regKeyItem!\!regSubKeyItem!" >nul 2>&1
					rem 查询子项存在
					if errorlevel==0 (
						REG ADD "%sRegPath%\!regKeyItem!\!regSubKeyItem!" /v http /t REG_DWORD /d 1 /f >nul 2>&1
						REG ADD "%sRegPath%\!regKeyItem!\!regSubKeyItem!" /v https /t REG_DWORD /d 1 /f >nul 2>&1
						echo !sValueSite! add success.
					) else if errorlevel==1 (
						REG ADD "%sRegPath%\!regKeyItem!\!regSubKeyItem!" >nul 2>&1
						if errorlevel==0 (
							REG ADD "%sRegPath%\!regKeyItem!\!regSubKeyItem!" /v http /t REG_DWORD /d 1 /f >nul 2>&1
							REG ADD "%sRegPath%\!regKeyItem!\!regSubKeyItem!" /v https /t REG_DWORD /d 1 /f >nul 2>&1
							echo !sValueSite! add success.
						) else if errorlevel==1 (
							echo "reg add %sRegPath%\!regKeyItem!\!regSubKeyItem! error"
						)
					)
				) else if "!regSubKeyItem!"=="" (
						REG ADD "%sRegPath%\!regKeyItem!" /v http /t REG_DWORD /d 1 /f >nul 2>&1
						REG ADD "%sRegPath%\!regKeyItem!" /v https /t REG_DWORD /d 1 /f >nul 2>&1
						echo !sValueSite! add success.
				)
			)
		) else if errorlevel==0 (
			rem 判断子项是否存在
			if not "!regSubKeyItem!"=="" (
				REG QUERY "%sRegPath%\!regKeyItem!\!regSubKeyItem!" >nul 2>&1
				rem 查询子项存在
				if errorlevel==0 (
					REG ADD "%sRegPath%\!regKeyItem!\!regSubKeyItem!" /v http /t REG_DWORD /d 1 /f >nul 2>&1
					REG ADD "%sRegPath%\!regKeyItem!\!regSubKeyItem!" /v https /t REG_DWORD /d 1 /f >nul 2>&1
					echo !sValueSite! add success.
				) else if errorlevel==1 (
					REG ADD "%sRegPath%\!regKeyItem!\!regSubKeyItem!" >nul 2>&1
					if errorlevel==0 (
						REG ADD "%sRegPath%\!regKeyItem!\!regSubKeyItem!" /v http /t REG_DWORD /d 1 /f >nul 2>&1
						REG ADD "%sRegPath%\!regKeyItem!\!regSubKeyItem!" /v https /t REG_DWORD /d 1 /f >nul 2>&1
						echo !sValueSite! add success.
					) else if errorlevel==1 (
						echo reg add %sRegPath%\!regKeyItem!\!regSubKeyItem! error
					)
				)
			) else if "!regSubKeyItem!"=="" (
						REG ADD "%sRegPath%\!regKeyItem!" /v http /t REG_DWORD /d 1 /f >nul 2>&1
						REG ADD "%sRegPath%\!regKeyItem!" /v https /t REG_DWORD /d 1 /f >nul 2>&1
						echo !sValueSite! add success.
			)
		)
	)


)

if not !nStartIndex!==!DomainSize! goto recycleLoop


endlocal

:endproc
echo IE config end


上述代码是通过写入注册表的方式配置IE安全站点

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

feng_blog6688

只需一个赞,谢谢你的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值