开始

  1. 打开文本编辑器(如记事本)
  2. 在文本编辑器中,输入命令行内容
  3. 保存文件,将文件扩展名更改为 .bat,例如 'hello.bat'
  4. 双击运行该批处理文件

基础语法

所有关键字不区分大小写,例如,/D/d 视为一致

if else

if condition1 (
    REM code to execute if condition1 is true
) else if condition2 (
    REM code to execute if condition2 is true
) else (
    REM code to execute if none of the conditions are true
)

示例:

@echo off
setlocal
set num=10
if %num% gtr 5 (
    echo The number is greater than 5.
) else (
    echo The number is not greater than 5.
)
endlocal
not exist

用于检查文件或目录是否存在的一种条件语句。

if not exist C:\path\to\file.txt (
    echo 文件不存在
) else (
    echo 文件存在
)

for do

for %%variable in (set) do command
  • %%variable:这是一个循环变量,通常用两个百分号(%%)来表示,如%%i、%%x等。该变量将在每次迭代中接受set中的一个值,并传递给command中执行的命令。
  • set:这是一个要遍历的集合,可以是文件列表、目录列表、字符串列表或其他类型的数据集。set通常包含在括号中,例如(1 2 3 4 5)或(file1.txt file2.txt file3.txt)。
  • command:这是要在每次迭代中执行的命令。通常,您可以使用%%variable来引用循环变量的值。
遍历文件:

遍历当前目录中的所有.txt文件:

for %%i in (*.txt) do (
    echo File: %%i
)
遍历目录:
for %%f in (D:\your\folder\*) do (
    echo File: %%f
)
遍历数字范围:
for /L %%variable in (start,step,end) do (
    Code for each number in the range
)
  • start 是起始数字
  • end 是结束数字
  • step 是递增步长

从1到5的数字范围内进行循环:

for /l %%x in (1,1,5) do (
    echo Number: %%x
)
扩展命令:

/D: 遍历指定目录中的所有子文件夹:

for /D %%d in (C:\path\to\folder\*) do (
    echo Directory: %%d
)

/R: 递归遍历指定目录及其子目录中的所有.txt文件:

for /R D:\your\folder\ %%f in (*.txt) do (
    echo File: %%f
)

/L: 将循环变量的值转换为小写字母:

for /L %%i in (1,1,5) do (
    echo Number: %%i
)

goto

:label

goto label

核心命令

echo 显示消息

echo [message]

显示简单文本消息:

echo Hello, world!
echo Batch scripting is fun!

显示变量的值:

set var=42
echo %var%

显示消息中的特殊字符(需要使用 ^ 进行转义,或者将整个消息用双引号括起来):

echo ^& is a special character.

显示消息并将结果输出到文件:

echo Message to file > output.txt
@echo off

一个特殊的命令,会禁用脚本的命令回显。在 .bat 文件开头添加是一种通用的做法。


set 定义变量

set [变量名=值]
  • 变量名 是要定义或修改的变量的名称
  • 是要分配给变量的值

定义 / 修改:

set MY_VAR=Hello, World!

删除:

set MY_VAR=
扩展命令

set /a:用于执行数学运算。例如,set /a num=5+3 将把 5 + 3 的结果(8)赋给 num 变量。

set /p:用于从用户输入中获取值。例如,set /p name=Enter your name: 将从用户那里接收输入的名称并存储在 name 变量中。


call 调用

调用另一个批处理文件,在被调用的批处理文件内,使用%1、%2 等变量来访问传递的参数值:

call another.bat param1 param2

在被调用的批处理文件中,使用 exit 命令来返回到调用批处理文件:

@echo off
echo This is another.bat
exit /b

文件目录命令

mkdir / md 创建目录

mkdir [drive:]path
mkdir Folder1 Folder2

rmdir / rd 删除目录

rmdir [选项] [drive:]path

选项:

  • /s:递归删除目录,包括目录内的所有子目录和文件
  • /q:安静模式,不要求用户确认删除操作

copy

待补充

del

待补充

move

待补充

输入输出命令

type

待补充

>> 和 >

待补充

|

待补充

辅助命令

rem 注释


pause 暂停

@echo off
echo This is a batch script.
pause

setlocal 和 endlocal

创建和管理局部环境变量块,在脚本中创建一个临时的环境变量作用域,以防止对全局环境变量的意外更改。

@echo off
set myVal=GlobalValue
echo Before setlocal: %myVal%

setlocal
set myVal=LocalValue
echo Inside setlocal: %myVal%
endlocal

echo After endlocal: %myVal%
setlocal enabledelayedexpansion

默认情况下,.bat 在执行时会一次性解释和扩展所有变量。这意味着如果在一个循环中更改了一个变量的值,它在循环中的后续迭代中仍然保持不变。本扩展用于启用延迟环境变量:

  • 实时变量扩展:启用延迟环境变量扩展后,可以在循环中实时更新和访问变量的值。
  • 使用 ! 符号:启用后,使用 ! 符号来访问变量的值,而不是 % 符号
  • 处理特殊字符:特殊字符,例如&、|、<、>等不会被立即解释
@echo off
setlocal enabledelayedexpansion

set count=0

for /L %%i in (1,1,5) do (
    set /a count+=1
    echo Current count: !count!
)

endlocal

timeout 等待指定时间

timeout [/t 秒数] [/nobreak]
  • /t 秒数:指定要等待的时间(单位秒)。如果未提供 /t 选项,默认为10 秒
  • /nobreak:可选标志,防止用户通过按任意键来终止等待

choice

待补充

运算符

数学运算符

  • +:加法
  • -:减法
  • *:乘法
  • /:除法
  • %:取模
set /a result=5+3
echo %result%

比较运算符

  • ==:相等,等效于equ
  • neq:不等于
  • lss:小于
  • leq:小于或等于
  • gtr:大于
  • geq:大于或等于
if 5 equ 5 (
    echo 相等
) else (
    echo 不相等
)

逻辑运算符

  • !(逻辑非):反转条件
  • &&(逻辑与):在条件1和条件2都为真时为真
  • ||(逻辑或):在条件1或条件2为真时为真

赋值运算符

  • =:用于给变量赋值,如 set myvar=Hello

特殊字符

'&'

用于引用变量。例如,%VAR_NAME% 表示引用一个变量名为 VAR_NAME 的变量。

'@'

在脚本中使用 @echo off 可以禁止显示批处理命令的执行过程。@ 符号可以用来取消对一条命令的回显。

'>' 和 '>>'

重定向输出。> 用于将命令的输出重定向到文件(覆盖已有内容),而 >> 则是将输出追加到文件末尾。

'|'

管道操作符,用于将一个命令的输出作为另一个命令的输入。例如,command1 | command2command1 的输出作为 command2 的输入。

'&'

用于在一行中执行多个命令。例如,command1 & command2 将依次执行 command1command2

'^'

转义字符,用于在特殊字符前面进行转义,以防止其被解释为特殊含义。例如,^> 表示字面上的 ">" 字符,而不是重定向符号。

特殊变量

%1, %2, %3, ...

这些变量表示命令行参数,其中%1表示第一个参数,%2表示第二个参数,以此类推。例如,如果你运行一个批处理文件并传递参数如下:myscript.bat arg1 arg2,那么%1将是"arg1",%2将是"arg2"。

%0

这个变量表示批处理文件自身的名称。

%*

这个变量表示所有命令行参数,可以在批处理文件中一次性引用它们。

%~dp0

这个变量表示批处理文件所在目录的完整路径。这在确定脚本的工作目录时非常有用。

%~nx1

这个变量用于获取指定文件的名称和扩展名,其中%1是文件的完整路径。例如,%~nx1将返回文件名和扩展名,如"myfile.txt"。

%DATE%

这个变量包含当前日期,通常以"Mon 09/06/2023"的格式显示。你可以使用各种方法来提取特定日期部分。

%TIME%

这个变量包含当前时间,通常以"hh:mm:ss.ss"的格式显示。你也可以使用各种方法来提取特定时间部分。

%USERNAME%

这个变量包含当前登录用户的用户名。

%COMPUTERNAME%

这个变量包含计算机的名称。

高频用法

清除屏幕信息

cls

打印回车

echo.

模拟 while 语法

@echo off
setlocal enabledelayedexpansion

set count=0

:while_loop
if !count! lss 5 (
    echo Count: !count!
    set /a "count+=1"
    goto while_loop
)

endlocal

打开

打开网页

start "" "http://www.cndoc.wiki/home"
  • start 命令用于打开指定的网页
  • "" 表示窗口标题,这里为空

打开文件夹

start "" "C:\Path\To\Your\Folder"

打开应用程序

start "" "C:\Program Files\XMind\XMind.exe"