windows批处理常用命令

前阵子在倒腾服务器的时候,需要些一些 windows 批处理来执行任务。就稍微研究了一下。

一、 基本信息

  1. 批处理文件扩展名为 .bat 或者 .cmd。区别:cmd 文件只能在 windows2000 以上的系统才能运行,bat 文件则没有这个限制。
  2. 这个文件的每一行都是一条 DOS 命令。
  3. 可以使用任何文本编辑器创建和修改。
  4. 批处理是一种简单的程序,可以用 ifgo 来控制流程,也可以使用 for 循环。
  5. 批处理的编程能力远不如 C语言等编程语言,也十分不规范。
  6. 每个编写好的批处理文件都相当于一个 DOS 的外部命令,把它锁在的目录放到 DOS 搜索路径(path)中,即可在任意位置运行。
  7. C:\AUTOEXEC.BAT 是每次系统启动时都会自动运行的,可以将每次启动时都要运行的命令放入该文件中。
  8. 大小写不敏感
  9. 在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统会调用cmd.exe来运行该文件。

二、 参数

  1. 系统参数

    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!
  2. 给批处理文件传递参数

    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.bat

1
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: 当时的时间”,最后重启系统。