bat批处理出现乱码后转为 ANSI 编码后可解决中文显示问题
bat的路径分隔符与windows系统一样,都是" \ "
"/" :所在的根目录
"./" :当前目录
"../" :上一级目录
"../../" :上上一级目录
%~dp0
cd /D %~dp0的意思如下:
更改当前目录为批处理本身的目录
比如你有个批处理a.bat在D:\qq文件夹下
a.bat内容为
cd /d %~dp0
在这里
cd /d %~dp0的意思就是cd /d d:\qq
%0代表批处理本身 d:\qq\a.bat
~dp是变量扩充
d既是扩充到分区号 d:
p就是扩充到路径 \qq
dp就是扩充到分区号路径 d:\qq
扩展阅读:
%~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录 cd是转到这个目录,不过我觉得cd /d %~dp0 还好些
当前目录创建文件:md %~dp0\Lixi
errorlevel
%errorlevel% 这是个系统变量,所以用两个%括起来,判断上个命令的反回值,if errorlevel 数值 command 语句
这个语句是用于判断上一个命令执行的返回值errorlevel,一般上一条命令的执行结果返回的值只有两个,"成功"用0 表示 "失败"用 1 表示,实际上,errorlevel 返回值可以在0~255 之间
学习要点:
1。显示信息:echo
2。注释语句:rem
3。目录切换:cd
4。列文件名:dir
1。设置文件属性:attrib
2。删除命令:del
3。复制文件:copy
4。复制文件(夹):xcopy
用set 命令设置自定义变量:
set var=abcd
echo %var%
set var=abcd 是批处理设置变量的方法。Var是变量名,而abcd则是变量名var的值。echo %var% ,在批处理中我们要引用这个变量就把var 变量名用两个%(百分号)扩起来,如%var%
注意:以下用法将清除变量variable 的值,使其变成未定义状态。
set variable=
上面等号后面无任何符号,如果写成SET variable="",此时变量值并不为空,而是等于两个引号,即""
- 用set 命令进行字符串处理:
1、字符串替换
格式:%PATH:str1=str2%
意思就是:将字符串变量%PATH%中的str1 替换为str2 -
字符串截取
格式:%a:~[m[,n]]%
方括号表示可选,%为变量标识符,a为变量名,不可少,冒号用于分隔变量名和说明部分,符号~可以简单理解为“
偏移”即可,m 为偏移量(缺省为0),n 为截取长度(缺省为全部)
-----------------------------------------------------------------------------------------------------例6,
@echo off
set a=bbs.bathome.cn
set var=%a:~1,3%
echo %var%
pause执行显示为:bs.
我们来分析一下set var=%a:~1,3% ,这里%a:~1,3%就是说变量 a 偏移量为1,要截取它的3位字符长度。合起来就是
把变量a 的值从第2 位(偏移量 1)开始,截取3 个字符赋予变量var例7,
@echo off
set a=bbs.bathome.cn
set var=%a:~1,-3%
echo %var%
pause执行显示:bs.bathome
这里就是把变量a 第2位起到倒数第3位前的值赋予var
我们还是总结一下吧:
a=bbs.bathome.cn
%a:~1,3% -------- “bs.” 变量a 偏离1位,截取3位字符。
%a:~1,-3% -------- “bs.bathome” 变量a 偏离1位,截取倒数第3位前的字符。
%a:~-3% -------- “.cn” 变量a 偏离-3位,截取倒数的3位字符。
%a:~-3,2% -------- “.c” 变量a 偏离-3位,截取倒数后3位的前两2位字符
%a:~3% -------- “.bathome.cn”变量a 偏离3位,截取完后面的字符。
%a:~,3% -------- “bbs” 变量a 偏离0位,截取3位字符。
if 判断语句
1。判断两个字符串是否相等,if "字符串1"=="字符串2" command 语句;
2。判断两个数值是否相等,if 数值1 equ 数值2 command 语句;
3。判断判断驱动器,文件或文件夹是否存在,if exist filename command 语句;
4。判断变量是否已经定义,if defined 变量 command 语句;
5。判断上个命令的返回值,if errorlevel 数值 command 语句。
判断两个数值是否相等
if 数值1 equ 数值2 command 语句
语句中的equ 表示相等的意思,判断两个数值之间的大小关系还有以下关系符号:
中文含义 关系符 英文解释
等于 equ equal
大于 gtr greater than
大于或等于 geq greater than or equal
小于 lss less than
小于或等于 leq less than or equal
不等于 neq no equal
用例:
@echo off
set /p var=请输入一个数字:
if %var% geq 10 (echo 此数大于或等于10) else echo 此数小于10
pause
判断判断驱动器,文件或文件夹是否存在
@echo off
if exist "e:" (echo e盘存在) else echo e盘不存在
pause>nul
这里是判断e: 是否存在!
@echo off
if exist d:\123.bat (echo 123.bat文件存在!) else echo 123.bat文件不存在!
pause
这个例子是用来判断123.bat文件是否存在的
@echo off
if exist test\ (echo test 文件夹存在) else echo test 文件夹不存在
pause
查找字符串:find
在abc.txt中查找字符串abc的行,并显示行号:find /n "abc" d:\abc.txt
字符串查找增强:findstr
findstr /s /i "MSN" *.txt
在当前目录和所有子目录中的txt文件中搜索字符串"MSN"(不区分字母大小写)。
打开文件或网页或者应用程序:
start "" "%userprofile%\桌面\abc.doc"
这里start后面要加""才能启动文件abc.doc,否则不能启动。
如果start 后没有 " " 则表示把title省略了,此时文件名若有""的话start就会把它看作是标题,从而变成了省略文件名,就默认开启cmd了。所以在start后加上""就能防止这种意外的情况。
复制文件夹:
xcopy /e d:\123 e:\kkk\
复制d:\123目录下所有文件(夹)到e:\kkk,包括空的子目录。(默认情况下,xcopy 不复制隐藏或系统文件)
从excel文件批量创建班级姓名文件夹:
md 张三
md 李四
md 王五
获取当前目录下所有文件的绝对路径:
dir /b/s >info.txt
获取当前目录下所有文件的名称:
dir /b >info.txt