windows批处理程序可以帮助我们做很多事情,这里简单的学习一下,备查。
1.基本dos命令简介,必要时可查:
cd改变目录,注意改变盘符不能用cd,直接c:
dir显示文件列表
rmdir删除文件夹
del删除文件
type显示文件内容
copy文件复制
path为可执行文件设置搜索路径,即设置环境变量
date显示或者设置系统日期
time显示或者设置系统时间
ver显示windows版本
cls清屏
分页查看长文件
type a.txt | more
查找命令
find
脚本的创建和执行
1.新建脚本,用记事本文件打开,保存为.bat或者.cmd文件。
2.执行脚本的方法:
1.双击,但是窗口停留的时间太短,需要在脚本最后后面加"pause"。
2.直接在cmd窗口进入绝对路径,输入文件名回车打开,会输出在cmd窗口里。
3.直接拖动bat文件到cmd窗口里,回车。
3.注释用::,也可以用rem,但是注意注释只能单独一行写。
4.声明变量SET A=B 注意这里等号两边不能有空格。
变量默认是字符串类型的,要想进行数值运算,要加/a参数,比如
set /a four=2+2
echo %four%
注意SET会覆盖掉以前重名的变量,在声明变量时最好echo一下,防止它覆盖掉系统变量。
5.引用变量echo %A%
6.变量的延迟替换,祥戳:点击打开链接
2.基本命令
@echo off
@echo off 屏蔽掉源代码的输出


echo on/off开启,关闭命令回显
@关闭命令回显
call命令:
call可以调用另一个批处理文件,也可以在命令中跳转
call called.bat
set:
@echo off
set xxx="c:/"
set x1=1
echo 显示所有以字母x开头的变量
set x
set xxx=
rem 删除xxx变量
echo 显示所有以字母x开头的变量
set x
pause
set xxx="c:/"
set x1=1
echo 显示所有以字母x开头的变量
set x
set xxx=
rem 删除xxx变量
echo 显示所有以字母x开头的变量
set x
pause
注意:
set不能用在复合语句里面比如if 1==1 set a=2或者for %%i in (a) do set a=2 这样写不能更改变量的值
重定向符< > >>
type source.txt > des.txt 将source.txt内的内容写入des.txt文件中,会覆盖源文件的内容
type source.txt >> des.txt 将source.txt内的内容追加到des.txt文件中,不会覆盖源文件的内容
管道 |
find "requirements" gp1.txt | sort > result.txt
将gp1.txt里的包含“requirements”的行排序输出到result.txt里。
流程控制:
goto命令:
if语句
if exist a.txt (echo 找到了a.txt文件,其内容为
type a.txt) else (
echo 找不到a.txt文件
)
或者
if not exist a.txt
for语句
注意:在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable,在命令行中要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.
注意这样写是错的:
for %%a in (*.txt) do(echo %%a
)
do和后面的(必须有空格,当do后有多条语句时必须加小括号。
一个例子:
【删除目录下某种格式的文件 】
for /r f:\study %i in (*.o) do del %i
for命令可以带参数或不带参数,带参数时支持以下参数:/d /l /r /f
无参数时:
for %%i in (t*.*) do echo %%i --显示当前目录下与t*.*相匹配的文件(只显示文件名,不显示路径)
参数/d:
搜索目录,注意只会搜索当前目录下的一级目录
for /d %%i in (c:\*) do echo %%i --显示c盘根目录下的所有目录
for /d %%i in (???) do echo %%i --显示当前目录下名字只有1-3个字母的目录
参数/R:
此命令会搜索指定路径及所有子目录中与set相符合的所有文件,注意是指定路径及所有子目录。
说明:
1、set中的文件名如果含有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。
2、如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录)(并在后面加上具体的文件名),而不管set中的指定文件是否存在。
例子:
for /r c:\ %%i in (*.exe) do echo %%i --把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来
for /r c:\ %%i in (boot.ini) do echo %%i --枚举了c盘所有目录,并在目录下加上了\boot.ini
for /r d:\backup %%i in (1) do echo %%i --枚举d\backup目录 ,并在目录下加了\1
for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i --很好的搜索命令,列举boot.ini存在的目录
参数 /L 数字递增
for /l %%i in (1,2,10) do @echo %%i --输出1,3,5,7,9
for /l %%i in (1,1,5) do md %%i --建立从1~5共5个文件夹
参数 /f 字符串处理
for /f "eol=; tokens=1,2* delims=, " %%i in (test.txt) do (
echo %%i
echo %%j
echo %%k
)
echo %%i
echo %%j
echo %%k
)
eol=; 忽略以分号打头的那些行;
tokens=1,2* --将每行中的第1个和第2个符号传递给 for 程序体;即%%i是分割出的第一个字符串,%%j是分割出的第二个,%%k是分割出的第三个,*代表以此类推,如果echo了的变量没有被赋值,比如%%k没有,就会显示echo is off
delims=, 用,和空格作为分割符号(注意逗号后面有个空格)。
注意(test.txt)里只能是文件或者字符串。