批处理编写以及修改注册表
批处理修改注册表
1、批处理注释
以下内容摘抄⾄ blog.csdn/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
set Domain[1]=ssop2.bocsys
set Domain[2]=ssop.bocsys
set Domain[3]=ssopomriis.p.bocsys
set Domain[4]=vatims-vims.p.bocsys
set Domain[5]=imse.bank-of-china
set Domain[6]=iccd-dapvip1.p.bocsys
set Domain[7]=gms.bocsys
set Domain[8]=e.bocsys
数组⼤⼩长度的统计,如下脚本
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、延迟变量
可以参见wwwblogs/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
set Domain[1]=ssop2.bocsys
set Domain[2]=ssop.bocsys
set Domain[3]=ssopomriis.p.bocsys
set Domain[4]=vatims-vims.p.bocsys
set Domain[5]=imse.bank-of-china
set Domain[6]=iccd-dapvip1.p.bocsys
set Domain[7]=gms.bocsys
set Domain[8]=e.bocsys
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 字符串分割位置索引 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.
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安全站点

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。