前言
最近工作需要用到bat,以前没有用过。一周快速开发下来,总结我自己最常用的方法。
语句
注释
在echo off的情况下,两者都可以用。在echo on的情况下,只有@rem可以用。
pause是等待输入
rem 注释1
@rem 注释2
::注释3
输出
“”适用于对象,如果输出加上“”,就是直接输出双引号的意思。而空格是默认的分割符。
echo=是单纯换行
echo hello,World
echo=
echo "hello,World"
输出文本
在echo on的环境下,.和=都能清空文本。而正常输出文本使用>就可以了。
echo 你好 > text.txt
echo hello world ~ ! # > text.txt
echo.>text.txt
echo 123 > text.txt
常量
%cd% 是文件所在的目录
%~dp0是文件的目录
echo %cd%
echo %~dp0%
设置
set语句是给对象赋值,可以是常量,也可以自定义。输出时需要是%name%这样的格式。不区分大小写。
谨记一点是,符号=左右都不要用空格,否则赋值不成功。当值是空的,就会输出“ECHO 处于关闭状态。”(echo off)或”ECHO 处于开启状态。“(echo on)
set root=%cd%
set Root=helloWorld
set test = 1
echo root:%root%
echo Root:%Root%
echo test:%test%
echo %test%
延迟变量
延迟变量是指在复合语句中变量赋值后得到变量当前的值。因为使用%name%得到的是变量上一个的值。使用!name!就能得到当下的值。需要使用“setlocal EnableDelayedExpansion”这个语句开启延迟变量。
setlocal EnableDelayedExpansion
set value=1
echo %value%
echo=
for %%v in ( 1 2 ) do (
set num=%%v
echo %num%
echo !num!
)
循环
for语句能实现循环。变量的作用域就在for里面,命名是%%+一个字母,区分大小写。写的时候要注意空格,缺了就跑不起来了。
for %%v in ( hello world "AAA" ) do ( echo %%v )
文本
读取文本的所有信息,需要结合for一起使用。 /f的意思是显示字符。
for /f %%v in ( test.txt ) do ( echo %%v )
字符串匹配有两个语句:find和findstr。find支持管道,就是使用|符号。前者得到值,能够传给后者。
for /f %%v in ( test.txt ) do ( echo %%v|find "," )
findstr支持正则,注意匹配多用+,不是用*
findstr "你好" test.txt
需要自定义分隔符时,搭配使用delims和tokens。delims是分隔符,默认是空格,tokens是需要显示的列数,默认是1,索引就是从1开始,更多是*。注意,如果写了具体的数值,就只会出现指定的列。
for /f "delims=, tokens=1" %%v in ( test.txt ) do ( echo %%v )
判断
if是如果,可以搭配else。判断是否存在就是用exist。也可以搭配运算符一起使用。
else的的位置必须是右括号的后面,所以右括号建议换行。
if exist test.txt ( echo 存在test.txt
) else ( echo 不存在test.txt )
set value=1
if value equ 0 ( echo 0
) else ( echo %value% )
延迟
单位是秒,填多少就等待多少秒。
TIMEOUT /T 2
删除
::删除非空文件夹
rmdir /s /q dir
::删除文件
del file
等待
TIMEOUT /T 5
后言
使用的时候千万要注意“”,()和空格的运用。很多时候语法并没有问题,就是这些格式的问题。