曹耘豪的博客

Windows之编写简单的.bat脚本

  1. 读取文本文件的特定范围行
  2. 网络请求
  3. 删除文件

读取文本文件的特定范围行

比如读取一个文本文件的第2-3行,脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
:: 清屏并关闭命令显示,只显示结果。非必需,主要是输出简洁一点
@echo off

:: UTF-8编码
chcp 65001

:: 变量延迟扩展,这样才能使用!var!变量,否则变量会不更新
setlocal enabledelayedexpansion

:: 设置变量,等号左右不能有空格!
set linenum=0

:: for循环,遍历文件的每一行
:: /f 打开文件
:: eol: 注释行,以eol开头的会忽略
:: skip: 循环时先跳过多少行,至少为1,非必需参数
:: tokens: 分隔后取哪几个,从1开始,支持1-71,*等写法,*代表“余下所有”代表一个token,默认只取第一个
:: delims: 每行分隔符,这里是=(等于号),默认是空格和tab
for /f "skip=1 tokens=1,* delims==" %%a in (filename) do (
:: 这里拿到了一行的内容,%%a代表行内第一个token,%%b代表行内第二个token,以此类推,必须按照英文字母顺序排列!
echo key = %%a value = %%b
:: 已读行数自增,也可以写作 set /a linenum = 1 + !linenum!
set /a linenum += 1

echo linenum = !linenum!
if !linenum! == 2 (
:: 第二行结束就提前中断,bat没有break语句...
goto next
)
)

:next

比如处理以下文本

1
2
3
4
1=a
2=b
3=c
4=d

输出结果是

1
2
3
4
5
Active code page: 65001
key = 2 value = b
linenum = 1
key = 3 value = c
linenum = 2

网络请求

使用curl,其中-s是为了只显示错误信息

1
curl -s -o output.tmp http(s)://xxx.com/xxx

然后后续读取该文件获取内容

删除文件

1
del /f /s /q filename