相关网站
先推荐一些学习BAT的网站,以下均是英文网站,自己在国内目前没有发现比较好的网站或者博文。如果大家发现了欢迎推荐给我!
- How To Write A Simple Batch (.bat) File
- 文章很简单, 很短
- 介绍BAT命令主要有
TITLE
ECHO
ECHO OFF
PAUSE
CLS
IPCONFIG
PING
等
- Batch Script Samples
- 可算高级进阶
- 提供了很多脚本示例,比如FTP上传下载脚本等,还包括一些错误的例子,是进一步学习bat的好地方
- Batch Script Generator
- 图形化BAT脚本生成器, 免费下载
- 很“懒”但很好,很适合非IT人员
- Batch Script Tutorial
- 很好的入门网站,类似runoob.com和W3C网站
- 自己主要从这正入门的,但原文有一些基本的错误,比如
set str = helloworld
在设定字符串变量时,变量名str
和=
之间是不能有空格的,因为BAT会将后面的空格当作变量名的一部分,即变量名为str(空格)
,但如果是数值型变量,如set /A var = 123
,var
和=
之间没有空格都行! <-- 笔者操作系统是win 7 专业版- 极少的示例是错误的,这个读者比较容易发现
- Windows Batch Scripting
- 这是wikibooks,权威性不用说了,精简但全面
- Guide to Windows Batch Scripting
- github上一位牛人的博客
bat学习--自动配置IP地址脚本
下面自己写的最早的一个bat脚本,非常的简单,因为自己每次上网都需要设置固定的IP,来回手动输入更换很麻烦
脚本
@echo off
title 自动设置IP地址
echo.
echo 1.设置寝室静态IP
echo 2.设置实验室静态IP
echo 3.设置自动获取IP
echo 4.设置XX机房静态IP
rem echo 5.手动设置静态IP
:: echo 6.手动设置静态IP
echo 0.exit
echo.
set /P i=请输入对应操作编号:
set IPADDR=10.100.222.67
set NETMASK=255.255.255.0
set GATEWAY=10.100.222.254
set DNS1=114.114.114.114
set DNS2=8.8.8.8
if %i% EQU 0 ( exit )
echo 设置中…………
if %i% EQU 1 (
netsh interface ipv4 set address name="本地连接" static 10.100.222.67 255.255.255.0 10.100.222.254
netsh interface ipv4 set dnsservers "本地连接" static %DNS1%
netsh interface ipv4 add dnsservers "本地连接" %DNS2%
)
if %i% EQU 2 (
netsh interface ipv4 set address name="本地连接" static 10.10.82.153 255.255.255.0 10.10.82.1
netsh interface ipv4 set dnsservers "本地连接" static %DNS1%
netsh interface ipv4 add dnsservers "本地连接" %DNS2%
)
if %i% EQU 3 (
netsh interface ipv4 set address name="本地连接" source=dhcp
netsh interface ipv4 set dnsservers "本地连接" source=dhcp
)
if %i% EQU 4 (
netsh interface ipv4 set address name="本地连接" static 10.113.48.201 255.255.255.0 12.113.48.1
netsh interface ipv4 set dnsservers "本地连接" static 10.113.250.253
netsh interface ipv4 add dnsservers "本地连接" 10.113.250.254
)
pause
解析
1. 大小写
- BAT是大小写不敏感的,也就是说
echo
,ECHO
,EcHo
都是一样的,对于命令的参数的大小写,变量的大小写,也如此。具体用小写还是大写依自己的习惯。 - 如下脚本执行后显示的都是
10
,这就不难理解了,其中%变量%
表示对变量的引用,
@echo off
set /a like=123
set /a LIKE=10
echo %like%
echo %LIKE%
echo %LiKe%
EcHo %like%
pause
2. 空格
- 同python不同,BAT对每行命令前的空格也是不敏感的,即有还是没有,或者有多少都不影响命令的执行
- 如下脚本执行后,执行结果都是100,其中只有第9行执行有问题,因为变量名
like
前并没有空格
@echo off
set /a LIKE=10
set /A like=100
echo %like%
echo %LIKE%
echo %LiKe%
EcHo %like%
echo % like%
echo %like%
pause
执行结果如下
3. echo、title、rem、::
- 脚本中第一行是
@echo off
,其中echo
的作用是显示信息,echo off
表示将回显关上,即如果没关上,那么在后续命令执行时会显示每条执行命令,命令前加@
是告诉在执行本行命令时不显示该命令。详细的请echo /?
或者自己尝试就知道彼此间的区别了。 title
用来设置BAT脚本执行时命令提示框的标题名echo.
中间没有空格,这用来显示空行rem
和::
都是启注释作用,即这一行是用来备注或方便阅读脚本的,并不执行- 下面是取消第一行
@echo off
后脚本执行时的显示
4. set
set
命令,用来设置变量的,/P
参数表示将变量i
的值设置成用户的一行输入,而i=请输入对应操作编号:
中的字符串是要显示的提示信息,用来提醒用户输入,其他参数的用法如/a
等可set /?
查询set
命令中变量名和=
之间最好不要有空格,见上面“相关网站4”的说明
5. if
- if
语句用来就行变量的判断,其中EQU
表示等于,%i% EQU 1
表示i是否等于1,如果等于则执行()内的命令,具体用法if /?
有中文的使用说明
- 如果只有一条命令()
是可由可无的,如果包含多调执行命令,如上图,则添加()
6. exit
- 即退出CMD.EXE程序或当前的批处理脚本
7. %%
%
主要用来进行变量的引用,如脚本中的%i%
表示引用上面set
定义的变量i的值%1
,%2
等这类单个%
也会存在,这个是用来引用传入给脚本或者函数的的参数,详细的请见后续博客的说明%%i
这类引用一般出现在for
循环语句中,详细的请见后续博客的说明
8. netsh
netsh
是一个windows下的一个网络设置工具,功能很多,netsh /?
可查询的到- 其中
netsh interface ipv4
可用来设置具体的ipv4地址等信息,如添加dnsservers
等 - 若是想要将笔记本设置为
一个wifi热点
的话,还可以通过命令netsh wlan
设置、启动或者关闭