1. Hello World
@echo off
rem This is a "Hello World" program.
@rem 这个也是注释
:: 这个也是注释
echo Hello World! & :: 这里可以写行后注释
echo=
@echo off
,关闭之后所有命令的回显,不然bat文件中每条指令会在cmd命令窗口显示rem
,注释@rem
, 这个也是注释::
, 这个也是注释echo
,输出echo=
,输出空白行
2. 变量
变量声明
变量无需声明可直接引用,其值为空字符串,并且大小写不敏感。可使用defined关键字或是否为空字符串””判断变量是否为空,如下所示:
@echo off
set var2="var2"
if not defined var2 (
echo var2 is not defined, the value is: %var2%
) else (
echo var2 is defined, the value is: %var2%
)
if "%var2%"=="" (
echo var2 is not defined, the value is: %var2%
) else (
echo var2 is defined, the value is: %var2%
)
-
变量赋值
@echo off
::var1是字符串 "2+2"
set var1=2+2
::var2是32位整形计算后的值, 4
set /a var2=2+2
::var3 是/p接收输入后的值
set /p var3=Please input a number:
::md5是 /p 和 <file_info.md5 操作后的结果, file_info.md5 是file_info文件的MD5值
set /p md5=<file_info.md5
::下面依次输出
::读取变量要通过这种形式: %变量%
echo var1: %var1%
echo var2: %var2%
echo var3: %var3%
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。
先执行脚本
@echo off
:: 这里标识下面的变量都是尽在脚本内生效
setlocal
set v=Local Variable
echo v=%v%
再在cmd中检查变量
D:\cmdtest>set v=Global Variable
D:\cmdtest>var_scope
v=Local Variable
D:\cmdtest>echo v=%v%
v=Global Variable
D:\cmdtest>