bat文件处理
bat文件处理实例
自动获取本地连接及IPv4地址修改、双IPv4地址添加
前言
对公司内部网站或者固定IPv4地址的产品开发经常遇到修改IP的问题,每次使用均通过手动方式非常麻烦,并且还得记住固定的IPv4地址。对开发人员还好修改IP是常有的事,但一旦产品量产交于其它部门进行使用测试便会出现IPv4地址不对应的问题,往往其它部门反馈的问题却总是上位机或者下位机有问题,让人头秃。
本文可实现在windows下的bat文件对本地IP地址进行保存至当前bat文件中以及设置IP地址 自动获取IP地址等功能。
一、Windows命令行CMD基本语法
语法帮助
对于所有的CMD命令均可以同时使用 命令 /?
进行获取帮助。也可以直接用 help 命令
.
首先进入Windows的命令行就要进行如下操作:
按住 win +r键 输入 cmd 然后回车
[图片上传失败...(image-e99b16-1655605490569)]
然后输入 ping /? 进行查询ping命令的使用帮助。
[图片上传失败...(image-a5e7de-1655605490569)]
变量赋值
直接用set操作 无需定义变量类型
set j=0
标题循环、条件判断
条件判断的语句语法如下:
IF [判断条件] (
[命令1]
) ELSE (
[命令2]
)
判断条件可以为常规的变量 k==1
等,也可以为字符串 string1==string2
。
比较条件也可以用下边的语法进行表示
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
比较常用的还用来进行文件是否存在的一种判断,如下 如果文件1.txt存在就进行删除
IF EXIST 1.txt del 1.txt
FOR循环语句常用来轮训一个文件中的每一行,或者每一行字符串中以某些符号进行分割然后进行轮训查找。
基本语法如下
轮训输出1.txt中的每一行字符串,tokens表示%%t变量赋值为通配符*所匹配到的值。
for /f "tokens=*" %%t in (1.txt) do (
echo %%t
)
变量的调用
赋值时可以直接将变量值j赋值给变量b,需要调用时需要添加%j%。
set j=0
set b=j
set con%j%=1
当添加变量延迟操作时需要使用!j!进行变量调用
setlocal enabledelayedexpansion
set j=0
set b=j
set con!j!=1
其它的使用语法可参考别人的博客CMD基本语法
二、bat文件处理代码解读
1.初始操作
代码如下:
@set "interipp=192.168.31.142"
@set "intermaskk=255.255.255.0"
@set "intergatee=192.168.31.1"
@set "interdns11=192.168.31.1 "
@set "interdns22=172.16.3.200"
@echo off
@cls
刚开始这里保存的是我们用来记录本机IP的地址,放在这里是为了不使用!以及转义字符^,因为这里字符在生成bat文件时会被系统默认给转义成变量值从而是的重新生成bat文件不能使用。(这种调试了很久,网上没有好的办法去处理。)
2.获取本地连接名称
::------------------------------------先跳转到这里---------------------------------------------------------------
::获取网络连接名称
:GETNAME
@if exist 10.bat del 10.bat
@cls
@(for /f "tokens=3*" %%a in ('netsh interface show interface^|more +2') do @echo,%%b)>".\network.txt"
@set j=0
@echo 获取到以下本地连接:
@for /f "tokens=*" %%i in (.\network.txt) do (
set /a j+=1
call set 网络连接%%j%%=%%i
call set ethernetAdapter=%%i
call echo %%ethernetAdapter%%
)
@del /s /q /f .\network.txt
上边的代码实现对本地存在的网络连接进行查询,并且保存在一个network.txt中方便进行输出打印,输出打印完毕删除文件即可(最后一行)。
3.打印本地网络连接
::选择需要设置的本地连接
@cls
@echo ----------------------------------------------------------------
@echo ----------------------------------------------------------------
@echo 请选择需要设置的网络连接:
@for /l %%i in (1,1,!j!) do (
echo 请按 %%i设置 "!网络连接%%i!"
)
echo.
3.选择要操作的本地连接
::根据选择赋值
set /p KEYSET= 已选择:
@cls
@for /l %%i in (1,1,!j!) do (
if %KEYSET% == %%i set name=!网络连接%%i!
if %KEYSET% == %%i echo 已选择 "!网络连接%%i!"
)
goto SET
添加这一部分是因为有电脑安装虚拟机或者无线连接会产生多个本地连接,只有你选择正确的本地连接才能设置正确的IP连接网络。
4.IPv4修改类型设置
代码如下(示例):
::配置选择 常规用户修改以下配置足够
:SET
@echo ----------------------------------------------------------------
@echo ----------------------------------------------------------------
echo 设置[内网IP]请按 1
echo 设置[自动IP]请按 2
echo 设置双IP 本机+固定请按 3
echo.
set /p KEY= 已选择:
if %KEY% == 1 goto ONE
if %KEY% == 2 goto TWO
if %KEY% == 3 goto THREE
5.设置局域网固定IPv4
:SET
@echo ----------------------------------------------------------------
@echo ----------------------------------------------------------------
echo 设置[局域网IP]请按 1
echo 设置[自动IP]请按 2
echo 设置[固定]请按 3
echo 设置双IP 本机+[固定]请按 4
echo 记录当前本机IP为[局域网IP]请按 d
echo.
@set /p KEY= 已选择:
if %KEY% == 1 goto ONE
if %KEY% == 2 goto TWO
if %KEY% == 3 goto THREE
if %KEY% == 4 goto FOUR
if %KEY% == 5 goto FIVE
if %KEY% == d goto D
上边是用来选择跳转用的,选择d则会跳转到保存当前IP的选项。
6.动态分配IPv4
代码如下(示例):
:TWO
echo 正在进行动态IP设置,请稍等...
echo. IP 地址正在从DHCP自动获取...
netsh interface ip set address "%name%" dhcp
echo. DNS地址正在从DHCP自动获取...
netsh interface ip set dns "%name%" dhcp
echo ----
echo 全部设置完成!
pause
goto end
这部分很普通网上多的是不在介绍了
7.添加双IPv4
代码如下(示例):
:THREE
echo 设置7 正在自动添加 IP ......
netsh interface ip add address name="%name%" addr=172.29.4.100 mask=255.255.0.0
echo IP地址 /子网掩码 /网关设置完成
pause
goto end
8.在当前bat文件中保存本地IPv4地址
这部分会先去获取本地连接IP地址,然后跳转
for /f "tokens=3* delims=: " %%a in ('netsh interface ip show config "%adapter%"^|find /i "IP 地址"') do (
set defaultip=%%a
goto NEXT1
)
:NEXT1
@for /f "tokens=4* delims=) " %%a in ('netsh interface ip show config "%adapter%"^|find /i "掩码"') do (
set defaultmask=%%a
goto NEXT2
)
下边这一部分会将当前bat文件进行读取输出,输出同时进行匹配DNS2所在行的字符串,如果存在则清空所有输出,将IP字段进行单独输出(为了规避叹号以及其它转义字符在生成bat文件时被替换的问题,这也是为什么将本地IP地址放在bat文件的前几行的原因),然后后边的输出与当前bat文件内容一直。
@(for /f "tokens=* delims=" %%t in ('findstr .* %infile%') do (
@for /f "tokens=1,2* delims= " %%i in ("%%t") do (
@rem 匹配dns1
@if "%%~j"=="interdns22=%interdns22%" (
@if exist %outfile% del %outfile%
@echo @set "interipp=%defaultip%">>%outfile%
@echo @set "intermaskk=%defaultmask%">>%outfile%
@echo @set "intergatee=%defaultgate%">>%outfile%
@echo @set "interdns11=%defaultdns1%">>%outfile%
@set /a cnt=1
)
)
最后还要一个跳转,生成一个新的bat文件执行删除当前bat文件并将新生成的bat文件重命名为原bat文件名。
echo 保存完成
goto JUMP
::生成一个新的bat文件进行旧文件的删除以及新文件的命名
:JUMP
@echo. >10.bat
@echo if exist %infile% del %infile%>>10.bat
@echo ren 3.bat %infile%>>10.bat
@echo %infile%>>10.bat
@echo if exist 10.bat del 10.bat>>10.bat
@echo exit>>10.bat
10.bat
exit
源码文件
新建一个.TXT的文档,将.TXT后缀修改为.bat,然后右键编辑或者用其它编辑器打开,将上述所有代码复制进去,最后运行的时候以管理员身份运行即可。
源码文件已经上传,可下载设置。
资源文件:IPv4自动修改及保存
总结
bat文件处理很方便,一些基本的添加删除文件操作以及电脑的设置均可以通过此进行设置,比如自动关机、添加定时任务等。