bat 批处理 + curl 批量下载图片

有一串 URL 相近的图片,怎样自动全部下载下来呢。 下载图片,刚好我之前安装过 cURL, 可以直接使用它下载。然后用脚本写一个循环就好了。 不想用 Python, PHP, Java 这么重量级的语言,于是想到了 bat 批处理。 在这里记录一下 bat 的常用语法。
  1. 回显: @echo off 表示命令不回显,因为默认每条命令都会在屏幕上显示的。@修饰的命令也不回显(即使 echo on)。
  2. 注释: rem 注释内容 或 :: 注释内容
  3. 变量: set var=value
  4. 输出: echo 要输出的内容
  5. 循环: for /l 可以设置数字循环,类似 for(int i;i 那种。不过 bat 里的变量、循环和 Java, C 等都不一样。详细搜一下“批处理 循环”就知道了。
  6. 延迟: 默认在复合语句里,变量会在一开始就替换,因此像 for, if 之类的符合语句中的变量通常不是你想的值。所以要设置 setlocal enabledelayedexpansion, 搭配感叹号使用。详见 http://www.cnblogs.com/ini_always/archive/2012/02/16/2355031.html
  7. 截取: 字符串截取语法:%var:~start,end%
  8. 前导: 想要数字前导0怎么办。C, Java 可以使用格式化占位符 %02d 之类的, bat 中可没有。于是我们先在数字前加上一定量的0,然后从后往前数需要的位数,那么就是带0前导了。
  9. 跳转: 冒号设置标号。goto 跳转到标号。
下面是我写的实现批量下载图片的批处理。
 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
33
@echo off
rem ~
rem curl下载图标

rem 
rem http://www.cnblogs.com/ini_always/archive/2012/02/16/2355031.html
setlocal enabledelayedexpansion

set url=http://m.weathercn.com/images/small/day/Day
set n=00

echo Day图标
set day=Day

:download
rem for /l in (start,step,end)
rem  %var:start,end%
for /l %%i in (0,1,33) do (
	set n=0%%i
	rem echo %url%!n:~-2!.png
	curl %url%!n:~-2!.png  > %day%!n:~-2!.png
)

rem if的用法 http://www.cnblogs.com/liuhy/p/3220397.html
if %day%==Night goto end

echo Night图标

set url=http://m.weathercn.com/images/small/night/Night
set day=Night
goto download

:end

Reader Echoes

2 comments

  • #1396咸菜一点米
    BAT这玩意有年头了吧,一直感觉挺神奇。
  • #1395c
    bat的异常退出让我非常头疼……

表情

评论提交后需经审核才会显示。