简介
- Bat脚本,也就是大众熟知的批处理脚本,它运行在windows系统上。使用cmd.exe打开bat脚本,解释器会运行脚本里每一条命令。现在微软已经开发了功能更强的powershell。在Linux系统中也有对应的shell脚本。熟练掌握bat可以大大简化日常工作量,提高工作效率。
- 我学习bat的另一个原因,是在实验室的windows server上批量训练神经网络。
学习资源汇总
- How To Write A Simple Batch (.bat) File bat入门
- Batch Script Samples bat进阶
- Batch Script Tutorial bat入门
- Windows Batch Scripting wikibooks,权威精简且全面
- Guide to Windows Batch Scripting github博客
快速入门
-
掌握常用命令:
-
echo
echo [sentence]
可以直接输出sentence的内容,不必在句子两旁加引号echo
显示此行之后的命令echo off
不显示此行之后的命令 -
@
添加至某行命令之前,表示不显示此行命令
-
call
调用其他文件(.bat、python脚本等) ,被调用文件执行结束后,返回当前执行文件
注意,如果不使用
call
,被调用文件执行结束后,不会返回当前执行文件 -
pause
在此行暂停批处理文件,并在屏幕上显示"Press any key to continue…",按下
press
则批处理文件继续执行。 -
REM
不执行此行,即此行为注释
-
-
goto
转跳指令-
调用
goto
,批处理文件将转跳至指定的标号处, 可以与if配合。1
2
3:start
REM do something...
goto start
-
- 重定向(待填坑)
几个小例子
-
实验室的服务器配置不完善,导致每次只能连接两个用户。我需要实时查询是否有其他用户在线(在线的话就用teamviewer):
1
2
3
4
5@echo off
:start
query user
choice /t 5 /d y /n >nul
goto start -
实时监控显卡的使用情况
1
2@echo off
nvidia-smi --format=csv --query-gpu=utilization.gpu,fan.speed,temperature.gpu,memory.used,power.draw -l -s
-
神经网络训练脚本。由于服务器管理员的水平问题,他的配置被添加到了系统路径,导致我每次使用conda的activate文件都需要传入绝对路径
1
2
3
4
5
6
7
8@echo off
call D:\user_name\Anaconda3\Scripts\activate gluon
call python test1.py
call python test2.py
...
pause
小结
批处理文件bat拥有很久远的历史。当比尔盖茨开发MS-DOS时,就在它的Command.com命令解释器中,纳入了批处理功能:把命令保存在.bat扩展名的文本文件中,命令解释器会运行它里面的每一个命令。
现在,微软开发了Powershell来代替cmd,并将PowerShell定位为Windows操作系统和微软企业应用程序的默认管理工具。
PowerShell比cmd要简单地多。许多时候,一行PowerShell命令行,能够替代成百上千的批处理代码。