前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >运维必学 | 工作实践示例-从零开始学Windows批处理(Batch)编程系列教程

运维必学 | 工作实践示例-从零开始学Windows批处理(Batch)编程系列教程

作者头像
全栈工程师修炼指南
发布2023-10-31 17:31:55
4710
发布2023-10-31 17:31:55
举报
文章被收录于专栏:全栈工程师修炼之路

本文为作者部分原创,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [master@weiyigeek.top] 中我将及时回复。

本章节是【从零开始学Windows-Batch批处理编程】系列教程的最后一章,这一章中主要是作者在工作实践中所编写和用到的批处理脚本,在博客中作者将会持续更新📱,针对已经入门Windows批处理的小伙伴们可以快速进行参考使用,希望对各位同道中人有用,若对你有帮助请转发给更多的朋友吧!

温馨提示: Windows Batch 批处理系列教程示例脚本可访问作者Github仓库中DevelopLearnig的项目,✈直达-> https://github.com/WeiyiGeek/DevelopLearnig/tree/main/TerminalScript/bat

原文地址: https://blog.weiyigeek.top


0x00 系统信息

1.使用批处理快速打印系统和相关配置信息

温馨提示: 注意如果不是中文模式(GBK)需要更改CMD编码,不是在scheduledtask会加载资源错误,以下脚本已在Win7正常运行,其他系统请自行调试。

代码示例:

代码语言:javascript
复制
@echo off
@REM 快速打印系统相关配置信息
@REM 博客地址 blog.weiyigeek.top
@REM OS 名称:版本:制造商:配置:构件类型
echo System Information >> System_Details.txt
systeminfo | findstr /B /C:"OS" > System_Details.txt      

@REM 系统主机名
echo Hostname >> System_Details.txt
hostname >> System_Details.txt

@REM 系统用户
echo Users>> System_Details.txt
net users >> System_Details.txt

@REM 接口路由表
echo Route table >> System_Details.txt
route print >> System_Details.txt

@REM 计算机活动连接包括PID
echo Netstat INformation>> System_Details.txt
netstat -ano >> System_Details.txt

@REM 防火墙状态
echo Firewall State >> System_Details.txt
netsh firewall show state >> System_Details.txt

@REM 防火墙域配置文件配置
echo Firewall configuration >> System_Details.txt
netsh firewall show config >> System_Details.txt 

@REM 计划任务,此处需要改变cmd活页代码,不是中文显示会有问题 
chcp 437
echo Scheduled tasks >> ScheTask_Details.txt
echo ---------- >> ScheTask_Details.txt
schtasks /query /fo LIST /v >> schetask_Details.txt
echo ---------- >> ScheTask_Details.txt
chcp 936

@REM 映像名称  PID  服务       
echo tasklist >> System_Details.txt
tasklist /SVC >> System_Details.txt                            

@REM 启动的服务
echo net start >> System_Details.txt
net start >> System_Details.txt

@REM 设备查询:模块名   显示名称 驱动程序类型  链接日期
echo driverquery >> System_Details.txt
DRIVERQUERY >> System_Details.txt

@REM 补丁查询
echo Wmic hotfix >> System_Details.txt 
wmic qfe get Caption,Description,HotFixID,InstalledOn >> System_Details.txt

@REM elavated 查询 
echo reg queries - elavated注册查询 >> System_Details.txt 
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
echo reg queries - elavated >> System_Details.txt
sc qc Spooler >> System_Details.txt
echo upnhosts - elavated >> System_Details.txt
sc qc upnphost >> System_Details.txt

@REM 特定用户或组对资源(包括文件、目录、注册表项、全局对象和Windows服务)拥有哪些类型的访问权限
@REM 安装地址: https://learn.microsoft.com/en-us/sysinternals/downloads/accesschk
@REM accesschk.exe -ucqv Spooler >> System_Details.txt
@REM accesschk.exe -uwcqv "Authenticated Users" * >> System_Details.txt

echo End of Script >> System_Details.txt

执行结果:

2.使用批处理监控系统HTTP连接数

描述: 此处使用echo命令并通过管道符号进行输出set /p动态交互的字符.

代码语言:javascript
复制
@echo off
@REM 监视指定HTTP端口连接数的批处理脚本
@REM 博客地址 blog.weiyigeek.top

set nowdate="%date:~0,10% %time:~0,5%"
set /a MONIROTPORT=%1%
if "%MONIROTPORT%" == "" goto usage

@REM 获取IP地址
ipconfig | findstr "IPv4" > %temp%\ipv4.txt

:count
echo %nowdate%
for /f "usebackq tokens=2 delims=:" %i in ("%temp%\ip.txt") do (
  set IP=%i
  set /p test="Num of HTTP Connections:  " < nul & netstat -na | findstr "\<%MONIROTPORT%\>" | find /C "%IP%:%MONIROTPORT%" 
)

@REM 延迟3秒执行
timeout 3 > nul

@REM 代码块跳转
GOTO count

:usage
echo "usage: %0% HTTP-Port"

执行结果:

代码语言:javascript
复制
[weiyigeek@localhost] L:\GitProject\DevelopLearnig\TerminalScript\Bat\Day06 $  2.Monitor-HTTP-Connections.bat 443
Num of HTTP Connections:  1
Num of HTTP Connections:  1
Num of HTTP Connections:  1

偷偷的告诉你哟?极客全栈修炼】微信小程序已开放

可直接在微信里面直接浏览博主文章哟,后续将上线更多有趣的小工具。



0x01 系统管理

1.使用批处理进行Win7操作系统环境垃圾清理

描述: 此处通过批处理脚本使用del命令删除操作系统中缓存文件以及垃圾文件,作为优化系统速度的第一步。

批处理示例

代码语言:javascript
复制
@echo off 
@REM Win7操作系统环境垃圾清理
@REM 博客地址 blog.weiyigeek.top
color 0a
title Windows7 OS Garbage Cleaning
echo ★☆ Win7 清理系统垃圾文件 ★☆★
echo 正在清除系统垃圾文件,请稍后

::Win7下面::是不支持得

@REM 清理 C:\Windows\temp 文件夹中的垃圾文件
del /f /s /q %windir%\*.bak 
del /f /s /q %windir%\prefetch\*.* 
dir %windir%\NtUninstall* /a:d /b >%windir%\DELLIST.txt 
for /f %%i in (%windir%\DELLIST.txt) do rd %windir%\%%i /s /q 
del %windir%\DELLIST.txt /f /q 
rmdir /s /q %windir%\temp & md %windir%\temp


@REM 清理磁盘的根目录的垃圾文件
del /f /s /q %systemdrive%\*.tmp 
del /f /s /q %systemdrive%\*._mp 
del /f /s /q %systemdrive%\*.log 
del /f /s /q %systemdrive%\*.gid 
del /f /s /q %systemdrive%\*.chk 
del /f /s /q %systemdrive%\*.old 
del /f /s /q %systemdrive%\recycled\*.* 

@REM 清理用户家目录的垃圾文件
@REM 等同于del /f /s /q "%temp%\*.*"
del /f /q %userprofile%\cookies\*.* 
del /f /s /q "%userprofile%\recent\*.*"
del /f /s /q "%userprofile%\local settings\temporary internet files\*.*"
del /f /s /q "%userprofile%\local settings\temp\*.*"

echo 
echo ★☆ 恭喜您!清理全部完成!☆★
echo

2.利用批处理脚本修改主机系统网络IP地址及DNS服务器

脚本示例:

代码语言:javascript
复制
@echo off
@REM 修改主机系统网络IP地址及DNS服务器
@REM 博客地址 blog.weiyigeek.top
set /p address=请输入IP地址(192.168.1.2):
set /p netmask=请输入子网掩码(255.255.255.0):
set /p gateway=请输入网关地址(192.168.1.1):
set /p dnsserver=请输入DNS服务器(223.6.6.6):

@rem 以太网IP 与 网关设置
netsh interface ip set address name="以太网" source=static addr=%address% mask=%netmask% gateway=%gateway% gwmetric=1

@rem 网络DNS域名解析服务器地址设置
netsh interface ip set dnsservers name="以太网" source=static address=%dnsserver% register=primary

@rem 刷新DNS解析
ipconfig /flushdns
ipconfig

3.使用批处理进行系统补丁检测并安装批处理

描述: 使用下面的批处理脚本来检测和打补丁,温馨提示采用systeminfo命令可以列出打过的补丁。

脚本示例:

代码语言:javascript
复制
@ECHO off
REM By Leo
SET TITLE=Windows 补丁安装脚本 V0.070408
TITLE %TITLE%
SETLOCAL ENABLEDELAYEDEXPANSION
SET PATCHFLAG=KB
SET CAT=%PATCHFLAG%*.cat
SET PATCHLIST="%temp%\patcheslist.tmp"
SET INSTALLED=√ 已安装
SET NOTINSTALLED=× 未安装
SET DELIMS=-----------------------------------------
SET PATCH_TOTAL=0
SET PATCH_NOTINSTALLED=0
SET FLAG_INSTALLED=1*
SET FLAG_NOTINSTALLED=0*
 
:main
TITLE 正在搜索... -- %TITLE%
ECHO 正在搜索当前目录"%cd%"及其子目录下的补丁...
ECHO 如果想在搜索完成后立即安装未安装的补丁,请按回车。
ECHO.
REM 搜索补丁,没有搜索到则退出,否则继续。
CALL :pfind || (call :error 1& goto :eof)
ECHO.
:confirm
TITLE 请选择要安装的补丁 -- %TITLE%
ECHO 搜索到如上%PATCH_TOTAL%个补丁,其中%PATCH_NOTINSTALLED%个未安装。安装全部请输入ALL,否则请直接按回车安装尚未安装的补丁。
SET confirm=
SET /p confirm=
IF /i "%confirm%" == "ALL" (SET confirm=
 ) ELSE IF not defined confirm (SET confirm=%FLAG_INSTALLED:~0,1%
 ) ELSE GOTO confirm
ECHO %DELIMS%
ECHO.
ECHO 正在安装,请稍候。安装程序不会抢占窗口焦点,所以你可以干点别的:)
ECHO.
CALL :setup %confirm%
del %PATCHLIST% 2>nul >nul
TITLE 安装已结束 -- %TITLE%
ECHO %DELIMS%
ECHO.
ECHO 安装已结束。要使补丁生效,你可能需要手动重新启动计算机。
ECHO 按任意键退出。
SET TITLE=
ENDLOCAL
PAUSE >nul
TITLE %ComSpec%
goto :eof
 
REM 安装补丁
:setup
if "%1" == "" (set patchsum=%PATCH_TOTAL%) ELSE set patchsum=%PATCH_NOTINSTALLED%
set patch_counter=0
FOR /f "eol=%1 usebackq tokens=2,*" %%i in (%PATCHLIST%) DO (

 set /a patch_counter+=1
 TITLE !patch_counter!/%patchsum%-%%i -- %TITLE%
 set nobackup=nobackup
 echo %%i | find /i "%PATCHFLAG%8" 2>nul >nul && set nobackup=n
 %%j /quiet /passive /norestart /!nobackup! 2>nul >nul
 ECHO !patch_counter!/%patchsum% %%i √)
goto :eof
 
REM 搜索当前目录下的补丁,返回非零值为失败。
:pfind
SET REG=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
SET listinreg="%temp%\listinreg.tmp"
reg query %reg%>%listinreg%
del %PATCHLIST% 2>nul >nul
REM 补丁是一个压缩包
FOR /r %%i in (*%PATCHFLAG%*.exe) DO CALL :pfind.sub "%%~ni" "%%~fi" "%%~sfi"
REM 补丁在压缩包展开后的目录内
FOR /r %%i in (%cat%) DO IF exist %%~dpiupdate.exe FOR /f %%j in ("%%~dpiupdate.exe") DO CALL :pfind.sub "%%~ni" "%%~fj" "%%~sfj"
IF not exist %PATCHLIST% EXIT /b 1
sort %PATCHLIST% /o %PATCHLIST%
rem 得到补丁个数
FOR /f "tokens=3 delims= " %%i in ('find /c /i "%FLAG_NOTINSTALLED%" %PATCHLIST%') DO SET PATCH_NOTINSTALLED=%%i
FOR /f "tokens=3 delims= " %%i in ('find /c /i "%FLAG_INSTALLED%" %PATCHLIST%') DO SET /a PATCH_TOTAL=%%i + %PATCH_NOTINSTALLED%
del %listinreg% 2>nul >nul
IF not defined patch_total EXIT /b 2
IF %patch_total% LSS 1 EXIT /b 3
EXIT /b 0
goto :eof
REM 看看补丁安装了没,然后写到标准输出和%PATCHLIST%内
:pfind.sub
IF "%~3" == "" GOTO :eof
CALL :getkbnum %1
SET id=!errorlevel!
IF not "!id!" == "-1" (
 find /i "!id!" %listinreg% 2>nul >nul && (
 set status=%FLAG_INSTALLED%& set isinstalled=%INSTALLED%
 )||(set status=%FLAG_NOTINSTALLED%& set isinstalled=%NOTINSTALLED%)
 ECHO !status! %PATCHFLAG%!id! %2>>%PATCHLIST%
 ECHO !isinstalled! %PATCHFLAG%!id! %3
)
goto :eof
 
REM 返回给定字串中的KB号,返回-1表示失败。
:getkbnum
SETLOCAL ENABLEDELAYEDEXPANSION
SET str=%~1
IF not defined str EXIT /b -1
IF not defined PATCHFLAG SET PATCHFLAG=KB
echo %PATCHFLAG%>getsize.tmp
for %%i in (getsize.tmp) do SET /a offset=%%~zi-2
del getsize.tmp 2>nul >nul
SET start=0
REM 仅有%PATCHFLAG%则返回-1
IF /i "%str%" == "%PATCHFLAG%" EXIT /b -1
REM 删除%PATCHFLAG%前的字符,删除失败则返回-1
:getkbnum.findkb
IF "%~1" == "!str!" (IF "!str:~%start%,%offset%!" == "" (EXIT /b -1
 ) ELSE IF /i "!str:~%start%,%offset%!" == "%PATCHFLAG%" (SET str=!str:~%start%!
 ) ELSE (SET /a start+=1 & goto getkbnum.findkb))
REM 仅有%PATCHFLAG%则返回-1
SET str=!str:~%offset%!
IF "%str%" == "" EXIT /b -1
SET start=0
REM 保证%PATCHFLAG%后的第一个字符不是数字时,仍能返回-1
IF "!str:~%start%,1!" GTR "9" EXIT /b -1
IF "!str:~%start%,1!" LSS "0" EXIT /b -1
REM 返回%PATCHFLAG%后的数字
:getkbnum.findnum
IF "!str:~%start%,1!" GTR "9" EXIT /b !str:~0,%start%!
IF "!str:~%start%,1!" LSS "0" EXIT /b !str:~0,%start%!
SET /a start+=1
goto getkbnum.findnum
ENDLOCAL
EXIT /b -1
 
:error
TITLE ERROR -- %TITLE%
IF "%1" == "1" (ECHO 没有找到补丁。使用的搜索规则是:CAT:%cat%,PATCHFLAG:%PATCHFLAG%。程序已结束。)
SET TITLE=
PAUSE >nul
TITLE %ComSpec%
goto :eof

参考来源: https://blog.csdn.net/darkread/article/details/8064493

4.使用批处理脚本探测局域网中存活的主机设备

描述: 开发人员常常需要使用windows系统管理众多的Linux服务器, 设置可固定的IP地址登录,因而交换机没有与主机绑定并且是未开启DHCP的所以有的时候会存在IP地址冲突的问题,因此需要探测主机局域网内所有设备IP。

脚本示例:

代码语言:javascript
复制
@echo off
Title 查询局域网中有那些主机在线
setlocal enabledelayedexpansion

@REM 获取本机IP地址
ECHO 正在获取本机的IP地址,请稍等...
for /f "delims=: tokens=2" %%i in ('ipconfig ^| find /i "IPv4"') do set ip=%%i
echo %ip%
 
for /f "delims=. tokens=1,2,3,4" %%i in ("%IP%") do set range=%%i.%%j.%%k
for /l %a in (1,1,254) do ( set "ipaddr=%range%.%a" && ping -n 1 !ipaddr!>nul )

ECHO.&ECHO 正在获取本网段内的其它在线计算机名,请稍等...
ECHO 本网段【%range%.*】内的计算机有:
 
for /f "delims=" %%i in ('net view') do (
  set "var=%%i"
  @REM 查询在线计算机名称
  if "!var:~0,2!"=="\\" (
    set "var=!var:~2!"
    ECHO !var!
    @REM 发送一个ping报文
    ping -n 1 !var!>nul
  )
)
 
ECHO.
ECHO 正在获取本网段内的其它在线计算机IP,请稍等...
for /f "skip=3 tokens=1,* delims= " %%i in ('arp -a') do ECHO IP:%%i 正在使用
 
ECHO.
ECHO 查询完毕,按任意键退出...
pause>nul

执行结果:


0x02 服务管理

1.使用批处理启动与关闭oralce、mysql服务

脚本展示

代码语言:javascript
复制
@echo off
@REM oralce或者mysql服务启动与关闭
@REM 博客地址 blog.weiyigeek.top

@REM 终端大小的显示
mode con:cols=85 lines=30
title oralce或者mysql服务启动与关闭

color 0a
@REM 交互式选择操作
choice /C abcdq /M "startOrace,stopOracle,startMysql,stopMysql,quit"  /T 60 /D q
if ERRORLEVEL 5 goto end
if ERRORLEVEL 4 goto stopMysql
if ERRORLEVEL 3 goto startMysql
if ERRORLEVEL 2 goto stopOracle
if ERRORLEVEL 1 goto startOracle

@REM oralce service start
:startOracle
net start OracleVssWriterORCL
net start OracleDBConsoleorcl
net start OracleOraDb10g_home1iSQL*Plus
net start OracleOraDb10g_home1TNSListener
net start OracleServiceORCL
goto end

@REM oralce stop service
:stopOracle
net stop OracleServiceORCL
net stop OracleOraDb10g_home1TNSListener
net stop OracleOraDb10g_home1iSQL*Plus
net stop OracleDBConsoleorcl
net stop OracleVssWriterORCL
goto end

@REM mysql start service
:startmMysql
net start MySQL
goto end

@REM mysql stop service
:stopMysql
net stop MySQL

:end
echo.
echo 命令执行成功
echo.
pause

0x03 系统安全

1.使用批处理编写WannaCry勒索病毒加固脚本工具

批处理示例:

代码语言:javascript
复制
@echo off
mode con: cols=85 lines=30
:TOPSEC
title WannaCry勒索病毒加固工具
color 0A
cls
echo.
echo -----------------  WannaCry勒索病毒加固工具  ------------------
echo.
echo    * 由于增加防火墙策略,并开启了防火墙,会导致没有加入防火墙例外的端口无法访问,需手工把需要开放的端口加入到例外中。
echo.
echo    * 声明:由于打印服务器大多使用445端口,加固后可能会出现打印服务工作异常,如果其他重要服务使用445端口,请在安全工程师指导下加固。
echo.
echo    * 建议: 边界防火墙阻断445端口的访问,可通过IPS、防火墙相关安全设备配置相关阻断策略。
echo.
echo    * 建议: 在微软官网下载MS17-010补丁,选择对应的版本进行补丁安装,补丁下载
echo      地址:https://technet.microsoft.com/zh-cn/library/security/MS17-010。
echo.
echo    * 必须以系统管理员身份运行,以下提供此工具所做的操作的介绍:
echo.
echo       1:WIN7/XP加固 2:WIN10加固 3:WIN2003加固 4:WIN2008/2012加固 5.WIN2016加固
echo.
echo       6: 退出
echo ----------------------------------------------------------------------------------
echo.
set start=
set /p start=输入(1 2 3 4 5 6)后按回车键:
if "%start%"=="1" goto WIN7
if "%start%"=="2" goto WIN10
if "%start%"=="3" goto WIN2003
if "%start%"=="4" goto WIN2012
if "%start%"=="5" goto WIN2016
if "%start%"=="6" goto quit
goto TOPSEC

:WIN7
net stop server /Y > nul
netsh advfirewall set currentprofile state on > nul
netsh advfirewall firewall add rule name="TOPSEC-DenyEquationTCP" dir=in action=block localport=445 remoteip=any protocol=tcp > nul
netsh advfirewall firewall add rule name="TOPSEC-DenyEquationUDP" dir=in action=block localport=445 remoteip=any protocol=udp > nul
echo ---------------------------------------------------------------------------------
echo    *  Windows 7 OR XP系统已加固成功!
echo .
pause
goto TOPSEC

:WIN10
net stop server > nul
netsh firewall set opmode enable > nul
netsh advfirewall firewall add rule name="TOPSEC-DenyEquationTCP" dir=in action=block localport=445 remoteip=any protocol=tcp > nul
netsh advfirewall firewall add rule name="TOPSEC-DenyEquationUDP" dir=in action=block localport=445 remoteip=any protocol=udp > nul
echo ---------------------------------------------------------------------------------
echo    *  Windows 10系统已加固成功!
echo .
pause
goto TOPSEC

:WIN2003
net stop server > nul
net start sharedaccess > nul
netsh firewall add portopening protocol = ALL port = 445 name = TOPSEC-DenyEquation mode = DISABLE scope = ALL profile = ALL > nul
echo ---------------------------------------------------------------------------------
echo    *  Windows Server 2003系统已加固成功!
echo .
pause
goto TOPSEC

:WIN2012
net stop server > nul
net start MpsSvc > nul
netsh advfirewall firewall add rule name="TOPSEC-DenyEquationTCP" dir=in action=block localport=445 remoteip=any protocol=tcp > nul
netsh advfirewall firewall add rule name="TOPSEC-DenyEquationUDP" dir=in action=block localport=445 remoteip=any protocol=udp > nul
echo ---------------------------------------------------------------------------------
echo    *  Windows Server 2012 OR 2008系统已加固成功!
echo .
pause
goto TOPSEC

:WIN2016
net stop server > nul
netsh advfirewall firewall add rule name="TOPSEC-DenyEquationTCP" dir=in action=block localport=445 remoteip=any protocol=tcp > nul
netsh advfirewall firewall add rule name="TOPSEC-DenyEquationUDP" dir=in action=block localport=445 remoteip=any protocol=udp > nul
echo ---------------------------------------------------------------------------------
echo    *  Windows Server 2016系统已加固成功!
echo .
pause
goto TOPSEC

2.使用批处理编写永恒之蓝加固脚本工具

描述:此脚本环缓解永恒之蓝漏洞针对Win7和Windows2008的影响,主要是关闭高危的服务和使用防火墙关闭高危风险端口。

批处理脚本示例

代码语言:javascript
复制
@echo off
@REM 主要针对于Win7和Windows2008添加服务器主机安全规则以及高危端口封禁
@REM 博客地址 blog.weiyigeek.top
color 0a
echo.
echo "关闭智能卡服务,并设置禁止自启"
net stop SCardSvr
net stop SCPolicySvc

sc config SCardSvr start= disabled
sc config SCPolicySvc start= disabled
echo.
echo "Successful!!!"

rem 开启服务
net start MpsSvc
rem 开机启动
sc config MpsSvc start= auto

echo "启用防火墙"
netsh advfirewall set allprofiles state on

echo "屏蔽端口"

netsh advfirewall firewall add rule name="deny udp 137 " dir=in protocol=udp localport=137 action=block

netsh advfirewall firewall add rule name="deny tcp 137" dir=in protocol=tcp localport=137 action=block

netsh advfirewall firewall add rule name="deny udp 138" dir=in protocol=udp localport=138 action=block

netsh advfirewall firewall add rule name="deny tcp 138" dir=in protocol=tcp localport=138 action=block

netsh advfirewall firewall add rule name="deny udp 139" dir=in protocol=udp localport=139 action=block

netsh advfirewall firewall add rule name="deny tcp 139" dir=in protocol=tcp localport=139 action=block

netsh advfirewall firewall add rule name="deny udp 445" dir=in protocol=udp localport=445 action=block

netsh advfirewall firewall add rule name="deny tcp 445" dir=in protocol=tcp localport=445 action=block
echo.
echo 添加防火墙成功,将自动重启,取消请再cmd中输入shutdown -a
echo.
timeout /T 30
shutdown /r /t 30
pause

3.使用批处理快速更改Windows远程桌面端口

例如,下述使用批处理快速将远程桌面端口更改为6673(Hex:00001a11),若将10进制转换十六进制请使用计算机中计算器(程序员)或者参考下一章节扩展工具中的【使用批处理实现二进制、十进制、十六进制间的转换】,

代码语言:javascript
复制
@echo off
@REM 远程桌面服务端口更改
@REM 博客地址 blog.weiyigeek.top
color 0A 
echo ---------------------------------------------------------------------------- 
echo 更改远程服务端口
echo ---------------------------------------------------------------------------- 
echo. 
echo REGEDIT4 >c:\windows\reg.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Tenninal Server] >> c:\windows\reg.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Tenninal Server\WinStations] >> c:\windows\reg.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Tenninal Server\WinStations\RDP-Tcp] >> c:\windows\reg.reg 

echo "PortNumber"=dword:00001a11 >> c:\windows\reg.reg 
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp] >> c:\windows\reg.reg 
echo "PortNumber"=dword:00001a11 >> c:\windows\reg.reg 

regedit /s c:\windows\reg.reg 

@echo 修改成功3389端口成功 
netsh advfirewall firewall add rule name=6673 dir=in action=allow protocol=TCP localport=6673
@echo 添加防火墙端口成功 
cmd.exe

0x04 扩展脚本

1.使用批处理实现二进制、十进制、十六进制间的转换

描述:在 Win10系统后系统自带计算器在程序员计算器里,在不同的进制下输入数据,对应的其它进制也会显示出来,而win7系统自带的计算器就没有这功能,想看对应的进制数据,需要手动点一下才行,所以写了个批处理,实现了输入10进制或16进制数据后,输出对应的10进制,16进制,2进制数据。

亲,文章就要看完了,不关注一下【全栈工程师修炼指南】吗?

批处理示例代码:

代码语言:javascript
复制
@echo off
@REM 批处理进行十六、十进制到2、10、16进制的转换
setlocal ENABLEDELAYEDEXPANSION
set hexstr=ss
set binstr=ss
set /a ii=0
set /a dec=0
set /a bin=0
set hex_return=123
set bin_return=123
set returnPara=321
set hex_type=x
set HEX_type1=X
set dec_type=d
set dec_type1=D
set blank=,
set  bincnt=0
set  binsl=4
echo 10进制数据前加字母D(大小写都有效)
echo 16进制数据前加0x(x大小写都有效)
:start
set  bincnt=0
set  binsl=4
echo 请输入数据
set /p input_str=
::输入字符到变量input_str
set /A str_num=%input_str%
::如果输入的是16进制数,将输入的16进制数转换为10进制赋值给str_num
::echo %str_num%
set str_type=%input_str:~0,1%
::提取输入字符的第一个字符(从0开始的第一个字符)
set str_type1=%input_str:~1,1%
::提取输入字符的第2个字符(从1开始的第一个字符)
::echo !str_type!
::echo !str_type1!
::echo !dec_type!
::pause
::echo !str_num!
::echo %str_num%
::pause
if !str_type1! equ !hex_type! (        
    call:dec2hex !str_num!
    set hex=!hex_return!    
    call:dec2bin !str_num!
    set bin=!bin_return!
    echo dec=%str_num%, hex=!hex_return!, bin=!bin_return!
)else if !str_type1! equ !HEX_type1! (        
    call:dec2hex !str_num!
    set hex=!hex_return!    
    call:dec2bin !str_num!
    set bin=!bin_return!
    echo dec=%str_num%, hex=!hex_return!, bin=!bin_return!
)else if !str_type! equ !dec_type! (
    set str_num=%input_str:~1,15%
    call:dec2hex !str_num!
    set hex=!hex_return!    
    call:dec2bin !str_num!
    set bin=!bin_return!
    echo dec=!str_num!, hex=!hex_return!, bin=!bin_return!
)else if !str_type! == !dec_type1! (
    set str_num=%input_str:~1,15%
    call:dec2hex !str_num!
    set hex=!hex_return!    
    call:dec2bin !str_num!
    set bin=!bin_return!
    echo dec=!str_num!, hex=!hex_return!, bin=!bin_return!
) else (echo input err)
goto start
::end

pause
for /l %%i in (0,1,255) do (
::echo i= %%i
set /a ii=%%i
set /a dec=!ii!
::echo dec= %%i
call:dec2hex !dec!
set return2=!return!
set hexstr2=!hexstr!
echo dec= %%i, return2=!return!, hexstr2=!hexstr2!
set /a ii+=1
)
echo done
pause
 
:dec2hex
set code=0123456789ABCDEF
set /a num=%1
::将第一个参数赋值给变量a
::echo %num%
::pause
set var=%num%
::echo %var%
::pause
set str=
:again
set /a tra=%var%%%16
::echo test
::echo !tra!
call,set tra=%%code:~%tra%,1%%
::echo tra=%tra%
::pause
set /a var/=16
::echo var=%var%
set str=%tra%%str%
if %var% geq 10 goto again
::echo %var%%str%
if %var% neq 0 (set hexstr=0x%var%%str%) else (set hexstr=0x%str%)
::echo hexstr=%hexstr%
set hex_return=%hexstr%
::echo return=%return%
goto:eof

:dec2bin
set code=01
set /a num=%1
set var=%num%
set str=
:again1
set /a tra=%var%%%2
::echo %var%
::echo %tra%
::pause
call,set tra=%%code:~%tra%,1%%
::echo tra=%tra%
::pause
set /a var/=2
::echo var=%var%
set /a bincnt+=1
if !bincnt! == !binsl! (    
    set str=%blank%%tra%%str%    
    ::长度等于4时,在字符前增加","字符    
    set /a bincnt=0        
) else (set str=%tra%%str%)
if %var% geq 2 goto again1 
::echo %var%%str%
if %var% neq 0 (set binstr=0b %var%%str%) else (set binstr=0b %str%)
::echo binstr=%binstr%
set bin_return=%binstr%
::echo return=%return%
goto:eof

执行结果:

温馨提示: 此处示例代码参考作者【Judee139】的【windows批处理实现10进制16进制二进制转换】,原文地址: [https://blog.csdn.net/yiranzhihuo/article/details/127106366]


0x05 扩展工具

1.如何将.bat批处理文件转为.exe的执行文件

描述: 有时如果我们的脚本中有一些硬编码的信息,如果不想被常规用户知道,此时我们非常有必要将.bat的文件转换为.exe的执行文件,此时如果使用者使用用记事本打开会显示一串二进制数据,让人摸不着头脑,这显然是我们希望看到的, 此处作者推荐一款Bat to Exe Converter转换工具。

Bat to Exe Converter是一款编译 BAT 和 CMD 批处理以及VBS文件转换 EXE 可执行文件的工具,可以把批处理文件 (.bat、.cmd、.vbs 格式) 换为真正的可执行程序(.exe格式),它可以毫无限制地运行于 Windows 2000/2003/XP/Vista/7/8/10 系统下。除此之外Batch File Converter还允许您在.EXE文件中设置各种资源,例如其描述、公司名称、版本信息,甚至应用程序图标,还可以针对批处理文件的内容进行加密保护以防止被修改。

官网下载地址: https://www.battoexe.com/

本文至此完毕,更多技术文章,尽情等待下篇好文!

原文地址: https://blog.weiyigeek.top/2023/7-30-224.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈工程师修炼指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.使用批处理监控系统HTTP连接数
  • 1.使用批处理进行Win7操作系统环境垃圾清理
  • 2.利用批处理脚本修改主机系统网络IP地址及DNS服务器
  • 3.使用批处理进行系统补丁检测并安装批处理
  • 4.使用批处理脚本探测局域网中存活的主机设备
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档