Windows批处理编程语法解析

批处理文件(BAT文件)是DOS,OS/2和Microsoft Windows中的一种脚本文件[1]。 它由命令行解释器执行的一系列命令组成,存储在纯文本文件中,通常以BAT为扩展名。批处理文件可以包含解释器交互接受的任何命令,并使用在批处理文件中启用条件分支和循环的构造,如IF,FOR和GOTO标签。在Windows平台自动化部署或处理日常重复性工作时,常使用Windows批处理文件。

批处理命令简介

下面简单介绍Windows BAT文件的语法。

变量操作

  • 设置变量

格式:set 变量名=变量值
详细:被设定的变量以%变量名%引用

  • 取消变量
    格式:set 变量名=
    详细:取消后的变量若被引用%变量名%将为空

  • 展示变量
    格式:set 变量名
    详细:展示以变量名开头的所有变量的值

  • 列出所有可用的变量
    格式:set

常用命令

  • @

让执行窗口中不显示它后面这一行的命令本身。

1
2
// 使用@将不显示后面的echo off命令
@ echo off
  • echo

echo即回显或反馈的意思。它由两种状态:打开和关闭。

1
2
3
4
// 将不显示后续的命令
@ echo off
// 将显示后续的命令
@ echo on
  • ::

注释命令。在批处理文件中与rem命令等效

  • call

call命令用来从一个批处理文件调用另一个批处理文件。只有当被调用的批处理文件执行完成时,才返回。

1
call pm2-startup install
  • start

启动单独的“命令提示符”窗口来运行指定程序或命令。如果在没有参数的情况下使用,start 将打开第二个命令提示符窗口。

  • pause

暂停命令。方便用户查看信息,查看完毕后可继续执行。

  • explorer

在 cmd 下输入explorer可打开文件夹图形界面,例如:

1
2
// 在图形界面中打开当前文件夹
explorer .
  • %i

for循环在cmd命令行中的固定用法for %i in (set) do (…),循环变量格式为%i

1
for %i in (1,2,3,5,8) do echo %i
  • %%i

for循环在bat处理程序中的固定用法for %%i in (set) do (…),循环变量格式为%%i

  • &

顺序执行多条命令,而不管命令是否执行成功

  • &&

顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令

  • ||

顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令(即:只有前面命令执行错误时才执行后面命令)

  • |

管道命令 前一个命令的执行结果输出到后一个命令 如:help|more

清除文件中原有的内容后再写入

追加内容到文件末尾,而不会清除原有的内容主要将本来显示在屏幕上的内容输出到指定文件中指定文件如果不存在,则自动生成该文件。

1
certutil -hashfile user-history.db md5 >> hash.txt
  • cd /d %~dp0
1
2
3
4
5
6
/d 表示直接切换到对应分区
%0代表批处理本身 d:\qq\a.bat
~dp是变量扩充
d既是扩充到分区号 d:
p就是扩充到路径 \qq
dp就是扩充到分区号路径 d:\qq

批处理脚本示例

示例1:

1
2
3
4
5
6
7
8
9
10
11
12
@echo off
set PATH=E:\Simulation\x64\Release\;%PATH%;
E:
cd E:\Simulation\x64\Release\
cd BlueSimu
start FlightSimServer.exe
cd ../RedSimu
start FlightSimServer.exe
cd ..
start Simulation.exe
start Simulation.exe
pause

示例2:

1
2
3
4
5
6
7
8
9
10
11
12
13
:: 定义变量
set dataset=j:\tensorflow\dataset\LSOTB-TIR\Training Dataset
set imagedir=%dataset%\LSOTB-TIR_TrainingData\TrainingData\TIR_training_004\bird_001
set xmldir=%dataset%\LSOTB-TIR_TrainingData\Annotations\TIR_training_004\bird_001
set labelpath=j:\tensorflow\workspace\training_demo\annotations\label_map.pbtxt
set outputdir=j:\tensorflow\workspace\training_demo\annotations\infrared_train_bird_004_001
set process_script=j:\tensorflow\scripts\preprocessing\generate_pascal_tfrecord.py

:: 调用tfrecord脚本程序, for循环,字符串截取,字符串拼接,路径空格处理
for /L %%i in (1,1,7) do python %process_script% -i "%imagedir:~0,-1%%%i" -x "%xmldir:~0,-1%%%i" -l %labelpath% -o %outputdir:~0,-1%%%i.record
:: for /L %%i in (10,1,16) do python %process_script% -i "%imagedir:~0,-2%%%i" -x "%xmldir:~0,-2%%%i" -l %labelpath% -o %outputdir:~0,-2%%%i.record

pause

参考链接

  1. Batch file,by Wikipedia.
  2. 批处理最完整人性化教程(.bat文件语法), by s1ihome.
  3. 批处理命令之Start的详细用法,by QiaoZhi.
  4. windows批处理set命令,by 鹤唳九天.
  5. windows批处理——变量,命令换行,by undefined.
  6. Batch批处理字符串操作、for循环学习记录,by blingbling_110.
  7. .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别,by AlbertS.
  8. Bat命令学习-批处理中的&、&&、|、||、>、>>符号,by iloli.
  9. Windows certutil.exe 命令 简单举例 计算MD5与SHA1/256,by ldq_sd.
  10. cmd: cd /D %~dp0 的含义,by Nemo_XP.
  11. CMD获取当前目录的绝对路径 (当前盘符和路径:%~dp0),by 亟待!.