前阵子在倒腾服务器的时候,需要些一些 windows 批处理来执行任务。就稍微研究了一下。
一、 基本信息
- 批处理文件扩展名为
.bat
或者.cmd
。区别:cmd 文件只能在 windows2000 以上的系统才能运行,bat 文件则没有这个限制。 - 这个文件的每一行都是一条 DOS 命令。
- 可以使用任何文本编辑器创建和修改。
- 批处理是一种简单的程序,可以用
if
和go
来控制流程,也可以使用for
循环。 - 批处理的编程能力远不如 C语言等编程语言,也十分不规范。
- 每个编写好的批处理文件都相当于一个 DOS 的外部命令,把它锁在的目录放到 DOS 搜索路径(path)中,即可在任意位置运行。
C:\AUTOEXEC.BAT
是每次系统启动时都会自动运行的,可以将每次启动时都要运行的命令放入该文件中。- 大小写不敏感
- 在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统会调用cmd.exe来运行该文件。
二、 参数
系统参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14%SystemRoot% === C:\WINDOWS (%windir% 同样)
%ProgramFiles% === C:\Program Files
%USERPROFILE% === C:\Documents and Settings\Administrator (子目录有“桌面”,“开始菜单”,“收藏夹”等)
%APPDATA% === C:\Documents and Settings\Administrator\Application Data
%TEMP% === C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp (%TEM% 同样)
%APPDATA% === C:\Documents and Settings\Administrator\Application Data
%OS% === Windows_NT (系统)
%Path% === %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem (原本的设置)
%HOMEDRIVE% === C: (系统盘)
%HOMEPATH% === \Documents and Settings\Administrator
:: 枚举当前的环境变量
setlocal enabledelayedexpansion
FOR /F "usebackq delims==" %%i IN (`set`) DO @echo %%i !%%i!给批处理文件传递参数
1
2
3
4
5
6
7
8
9
10%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。
变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用 %1 到 %9 顺序表示。
Sample:
call test2.bat "hello" "haha" (执行同目录下的“test2.bat”文件,并输入两个参数)
在“test2.bat”文件里写:
echo %1 (打印: "hello")
echo %2 (打印: "haha")
echo %0 (打印: test2.bat)
echo %19 (打印: "hello"9)
三、 基本命令
set
md
echo
shutdowm
pause
符号:
>
传递并覆盖>>
传递并追加::
注释
找到一个比较清晰比较全的一个文档,在这里
四、 例子
重启的批处理1
shutdown -r -f -t 0
r: 关闭并重启计算机。
f: 强制关闭正在运行的应用程序,不在前台警告用户。
t xxx: 设置关闭的超时事件为 xxx 秒。有效范围时0-315360000(10年),默认值为30.
在重启前,将重启时间写入日志(以下已在英文版windows操作系统上检测过)
restart.bat1
2
3
4
5
6
7
8@echo off
set nowdate=%date:~4, 10%
set nowtime=%time:~0,8%
set content=%nowdate:/=-% %nowtime%
set distpath="c:\restartlog"
::write log
echo restart time: %content% >> %distpath%\log.txt
shutdown -r -f -t 0
再在windows的计划任务中,将这个脚本配置进去。则当脚本执行,将会在系统的c盘下新建一个目录restartlog,然后在这个目录中创建一个文件log.txt,并在文件中追加写入: “restart time: 当时的时间”,最后重启系统。