Windows下开发的必备的脚本bat
在开发的时候,是不是有很多枯燥的重复、简单的⼯作,是不是很想从其中解脱出来,反正我是想从⾥⾯解脱出来
bat⾥⾯有很多语法,有些语法看起来不顺眼,反正我觉得看起来没有c语法顺眼(bat是很强⼤的)
初学者可以先学2个命令,学了之后,有利于测试⾃⼰写的bat
echo:显⽰这⼀条命令后⾯的字符
pause:执⾏这⼀条命令之后,会暂停执⾏,并且在屏幕上显⽰“请按任意键继续...”
先来看⼀个例⼦:
echo hello
pause
再来看运⾏⼀下结果
再来分析上⾯的结果(其中E:\BA>是我存放bat⽂件的路径),上⾯明显是执⾏2条命令,每⼀条都有相应的结果,所以bat实际是⼀系列命令组成的可执⾏⽂件,后缀为.bat
执⾏的命令在屏幕上显⽰,有时候我并不需要,只需要结果就可以,有没有办法可以让他们不显⽰呢?当然有!
echo on  :在此语句后所有运⾏的命令都显⽰命令⾏
echo off: 表⽰在此语句后所有运⾏的命令都不显⽰命令⾏
@与echo off相像,但它是加在每个命令⾏的最前⾯,表⽰运⾏时不显⽰这⼀⾏的命令⾏(只能影响当前⾏)。
pause>nul代替pause,那么“请按任意键继续...”也不见了
怎么加注释
REM:该命令后的内容不被执⾏,但能回显。
:: 也可以起到rem 的注释作⽤, ⽽且更简洁有效; 但有两点需要注意:
第⼀, 任何以冒号:开头的字符⾏, 在批处理中都被视作标号, ⽽直接忽略其后的所有内容。
有效标号:冒号后紧跟⼀个以字母数字开头的字符串,goto语句可以识别。
⽆效标号:冒号后紧跟⼀个⾮字母数字的⼀个特殊符号,goto⽆法识别的标号,可以起到注释作⽤,所以 :: 常被⽤作注释符号,其实 :+ 也可起注释作⽤。
第⼆, 与rem 不同的是, ::后的字符⾏在执⾏时不会回显,
⾏内注释格式:%注释内容%  (不常⽤,慎⽤)
如何定义变量
可以⽤set命令,set可以⽤来设置变量的值,还可以输⼊为变量赋值,还可以⽤来进⾏数学运算,需要注意变量和等号之间不能有空格
设置变量的值
set string=csdn
输⼊为变量赋值
set /p var=please enter string:
数学运算
set a=100
set b=4
set /a var=a+b
如何使⽤定义好的变量呢,可以使⽤%,例如%var_name%,对的,就是这样
set string=csdn
echo %string%
结果 :csdn
怎么传参呢
%[0-9]表⽰参数,%0表⽰批处理命令本⾝,其它参数字符串⽤ %1 到 %9 顺序表⽰,这和C语⾔是⼀样的
call test.bat welcome to my blog
那么在test.bat⾥⾯执⾏下⾯的命令
echo %0            ============== test.bat
echo %1            ==============welcome
上⾯上到call命令:调⽤⼀个bat⽂件,可以调⽤本⾝,call命令除了可以传参,还可以指定bat所在路径(默认路径是当前路径)
下⾯是⼀些常⽤命令
if 命令
1. 字符串1==字符串2”或“变量1==变量2”或“变量==字符串”的形式,也即是说只能使⽤“==”进⾏字符串
或变量之间的⽐较,上⾯的“not”表⽰相反操作
2. 结合errorlevel,errorlevel”是MS-DOS的内置环境变量,主要⽤于保存上⼀条命令语句是否执⾏成功
3. if exist 可以判断⽬录、⽂件是否存在
4. if defined 可以判断变量是否已经定义
5. if +运算符,进⾏数值⽐较
EQU - 等于
NEQ - 不等于
LSS - ⼩于
LEQ - ⼩于或等于
GTR - ⼤于
GEQ - ⼤于或等于
dir命令
dir #显⽰当前⽬录中的⽂件和⼦⽬录
dir /a #显⽰当前⽬录中的⽂件和⼦⽬录,包括隐藏⽂件和系统⽂件
dir c: /a:d #显⽰ C 盘当前⽬录中的⽬录
dir c: /a:-d #显⽰ C 盘根⽬录中的⽂件
dir c:\ /b/p #/b只显⽰⽂件名,/p分页显⽰
dir *.exe /s #显⽰当前⽬录和⼦⽬录⾥所有的.exe⽂件龙虾刑警的演员
隐藏的文件怎么显示出来
cd命令
cd\ #进⼊根⽬录
cd #显⽰当前⽬录
rd命令
rd abc #删除当前⽬录⾥的 abc ⼦⽬录,要求为空⽬录
rd /s/q d:\temp #删除 d:\temp ⽂件夹及其⼦⽂件夹和⽂件,/q安静模式
del命令
del d:\ #删除指定⽂件,不能是隐藏、系统、只读⽂件
del /q/a/f d:\temp\*.* #删除 d:\temp ⽂件夹⾥⾯的所有⽂件,包括隐藏、只读、系统⽂件,不包括⼦⽬录
del /q/a/f/s d:\temp\*.* #删除 d:\temp 及⼦⽂件夹⾥⾯的所有⽂件,包括隐藏、只读、系统⽂件,不包括⼦⽬录copy命令
唐诗咏崔建邦拷贝⽂件
copy c:\ d:\test.bak
复制 c:\ ⽂件到 d:\ ,并重命名为 test.bak
copy
从屏幕上等待输⼊,按 Ctrl+Z 结束输⼊,输⼊内容存为⽂件
con代表屏幕,prn代表打印机,nul代表空设备
+ 2.
合并 1.txt 和 2.txt 的内容,保存为 3.txt ⽂件
如果不指定 3.txt ,则保存到 1.txt
鸡蛋羹怎么做好吃 +
复制⽂件到⾃⼰,实际上是修改了⽂件⽇期
另外⼀个更强⼤的copy命令xcopy (外部命令)
⽂件拷贝
xcopy d:\mp3 e:\mp3 /s/e/i/y
复制 d:\mp3 ⽂件夹、所有⼦⽂件夹和⽂件到 e:\ ,覆盖已有⽂件
王志文婚礼
加 /i 表⽰如果 e:\ 没有 mp3 ⽂件夹就⾃动新建⼀个,否则会有询问
ren 命令
ren d:\temp tmp #⽀持对⽂件夹的重命名
cls命令
清屏
显⽰⽂件内容
type c:\boot.ini #显⽰指定⽂件的内容,程序⽂件⼀般会显⽰乱码type *.txt #显⽰当前⽬录⾥所有.txt⽂件的内容
date和time命令
⽇期和时间
date #显⽰当前⽇期,并提⽰输⼊新⽇期,按\"回车\"略过输⼊date/t #只显⽰当前⽇期,不提⽰输⼊新⽇期
time #显⽰当前时间,并提⽰输⼊新时间,按\"回车\"略过输⼊time/t #只显⽰当前时间,不提⽰输⼊新时间
goto 和 :命令
跳转命令
:label #⾏⾸为:表⽰该⾏是标签⾏,标签⾏不执⾏操作
goto label #跳转到指定的标签那⼀⾏
find (外部命令)
查命令
find \"abc\" c:\
在 c:\ ⽂件⾥查含 abc 字符串的⾏
如果不到,将设 errorlevel 返回码为1
find /i “abc” c:\
演员何中华
查含 abc 的⾏,忽略⼤⼩写
find /c \"abc\" c:\
显⽰含 abc 的⾏的⾏数
顺序执⾏多条命令,⽽不管命令是否执⾏成功
&&和||命令
顺序执⾏多条命令,当碰到执⾏出错的命令后将不执⾏后⾯的命令find \"ok\" c:\ && echo 成功
如果到了\"ok\"字样,就显⽰\"成功\",不到就不显⽰24 ||
顺序执⾏多条命令,当碰到执⾏正确的命令后将不执⾏后⾯的命令find \"ok\" c:\ || echo 不成功
如果不到\"ok\"字样,就显⽰\"不成功\",到了就不显⽰
|命令
管道命令
dir *.* /s/a | find /c \".exe\"
管道命令表⽰先执⾏ dir 命令,对其输出的结果执⾏后⾯的 find 命令该命令⾏结果:输出当前⽂件夹及所有⼦⽂件夹⾥的.exe⽂件的个数type c:\re
这个和 more c:\ 的效果是⼀样的