https://blog.csdn.net/chuangxin/article/details/104100725

1. Hello World

  1. @echo off
  2. rem This is a "Hello World" program.
  3. @rem 这个也是注释
  4. :: 这个也是注释
  5. echo Hello World! & :: 这里可以写行后注释
  6. echo=
  • @echo off,关闭之后所有命令的回显,不然bat文件中每条指令会在cmd命令窗口显示
  • rem,注释
  • @rem, 这个也是注释
  • ::, 这个也是注释
  • echo,输出
  • echo=,输出空白行

2. 变量

变量声明

变量无需声明可直接引用,其值为空字符串,并且大小写不敏感。可使用defined关键字或是否为空字符串””判断变量是否为空,如下所示:

  1. @echo off
  2. set var2="var2"
  1. if not defined var2 (
  2. echo var2 is not defined, the value is: %var2%
  3. ) else (
  4. echo var2 is defined, the value is: %var2%
  5. )
  6. if "%var2%"=="" (
  7. echo var2 is not defined, the value is: %var2%
  8. ) else (
  9. echo var2 is defined, the value is: %var2%
  10. )
  • 没设置的变量, 默认值都是空字符串, 没有null的概念

    变量赋值

    1. @echo off
    2. ::var1是字符串 "2+2"
    3. set var1=2+2
    4. ::var232位整形计算后的值, 4
    5. set /a var2=2+2
    6. ::var3 是/p接收输入后的值
    7. set /p var3=Please input a number:
    8. ::md5 /p <file_info.md5 操作后的结果, file_info.md5 file_info文件的MD5
    9. set /p md5=<file_info.md5
    10. ::下面依次输出
    11. ::读取变量要通过这种形式: %变量%
    12. echo var1: %var1%
    13. echo var2: %var2%
    14. echo var3: %var3%
    15. echo md5: %md5%
  • 变量赋值时等号前后不能有空格,类似set a = 1会报错

  • /a 是表达式运算,仅适合32位整型运算,可以是负数
  • /p 是提示输入,将输入值赋值给变量
  • set /p md5=<file_info.md5, 读取md5文件内容并赋值给md5变量
  • 可通过set a=清空变量

变量读取

  • 可通过%var%, 读取变量值
  • set var,列出var开头的所有变量
  • set,列出所有变量,如系统环境变量TEMP、PATH等也会列举出来
  • !var!,两个感叹号,延迟读取变量值,本文后面 “变量延迟” 部分会详细讲解
  • 需要了解的一些系统内置变量
  • %date%,系统日期,类似:2020/02/29 周六
  • %time%,获取系统时间,类似:17:13:15.18
  • %cd%,获取当前目录
  • %RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字
  • %NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。
  • %PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值:x86 或 IA64 基于Itanium
  • %PROCESSOR_IDENTFIER% 系统 返回处理器说明。
  • %PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。
  • %PROCESSOR_REVISION% 系统 返回处理器的版本号。
  • %COMPUTERNAME% 系统 返回计算机的名称。
  • %USERNAME% 本地 返回当前登录的用户的名称。
  • %USERPROFILE% 本地 返回当前用户的配置文件的位置。
  • %~dp0,bat脚本文件所在目录


变量作用域

默认为全局变量(Global),可使用setlocal命令将变量作用域设置为local,直到endlocal或exit命令,或bat文件执行结束,变量local作用域也结束并恢复到global作用域,看下述DEMO。

  • 先执行脚本

    1. @echo off
    2. :: 这里标识下面的变量都是尽在脚本内生效
    3. setlocal
    4. set v=Local Variable
    5. echo v=%v%
  • 再在cmd中检查变量

    1. D:\cmdtest>set v=Global Variable
    2. D:\cmdtest>var_scope
    3. v=Local Variable
    4. D:\cmdtest>echo v=%v%
    5. v=Global Variable
    6. D:\cmdtest>