Skip to content

/execute 执行命令

以其他实体的身份、位置或维度执行命令,支持条件判断

命令
官方•Dingding OvO · 2026-08-12

基岩版最强大的命令,用于改写一条命令的执行上下文(执行者、位置、角度、维度),并为其附加条件判断。基岩版 1.19.50 起本命令被彻底重写,旧版 execute <目标> <位置> [detect ...] 语法已弃用,改为与 Java 版一致的子命令链语法。

原理

/execute 本身不改变世界里的任何方块或实体,它只做一件事:在内存中改写一条命令的「执行上下文」。任何命令在执行时都携带一组上下文信息,包括执行者(谁在跑这条命令、@s 指向谁)、执行位置、朝向角度和所在维度。当你在聊天栏输入命令时,执行者是你本人,位置是你的坐标;当命令从命令方块发出时,命令没有执行者,位置落在命令方块上。/execute 就是在这组上下文被最终命令读取之前,逐项修改它的工具。

子命令按书写顺序从左到右依次生效,后一个子命令基于前一个的结果继续修改上下文,最后一个 run 才真正触发目标命令。关键机制在于 as、at、positioned as、rotated as、facing entity 这些接受目标选择器的子命令:当选择器匹配到多个实体时会发生「执行分叉」,命令流分裂成与匹配实体数量相同的分支,每个分支携带一份独立的上下文副本,后续子命令和 run 会在每个分支上各执行一次。这正是 @s 能「依次指代每个实体」的底层原因——@s 只是一个动态引用,它在执行时解析为当前分支上下文里的执行者,而 as 改写了这个字段,at 则只改位置、不改执行者。

if/unless 是把命令变成「判定器」的子命令。它们在当前上下文里求值一个条件:if 在条件为真时继续,unless 在条件为假时继续;一旦判定失败,链条从这里截断,后面的所有子命令和 run 都不会执行,整条命令以失败返回。这个成功/失败信号不仅影响命令输出,还会被条件命令方块读取——条件命令方块会检查指向它的命令方块在上一游戏刻是否执行成功,因此 execute if ... 可以单独作为条件命令方块的判定前置,替代旧版的 /testfor、/testforblock、/testforblocks。

旧版 /execute 把执行者和位置强制绑定在一起,语法是 execute <目标> <位置> <命令>,条件判断只能靠追加的 detect 完成,而 detect 是基岩版独有写法。基岩版 1.19.50 借鉴 Java 版重写了整套语法,把「执行者、位置、角度、维度、条件」拆成可任意组合的子命令,让执行者与位置彻底解耦,这是本命令能支撑几乎所有复杂命令系统的结构基础。

语法

新版语法(1.19.50+):

/execute <子命令>... run <命令>

其中 <子命令> 可以是 as、at、positioned、rotated、in、anchored、facing、align、if、unless 中的任意一个或多个。子命令按顺序链式组合,run 放在最后触发最终命令;run 可以省略,此时整条命令返回最后一个条件的判定结果。

旧版语法(1.19.50 以下):

/execute <目标> <位置> <命令>

/execute <目标> <位置> detect <检测位置> <方块> <数据值> <命令>

旧版把执行者与位置绑定,条件判断只能通过 detect 附加,1.19.50 起已弃用。

参数

/execute 由子命令驱动,各子命令的参数不同。以下是所有子命令中出现的公共参数。

  • <目标> — 目标选择器(如 @p、@a、@e、@s),指定一个或多个实体作为操作对象,用于 as、at、positioned as、rotated as、facing entity 及 if entity 等子命令。
  • <x> <y> <z> — 世界坐标,支持绝对坐标(数字)、相对坐标(~)和局部坐标(^);相对坐标基于当前执行位置计算,局部坐标基于当前朝向计算。
  • <yaw> <pitch> — 水平旋转角与垂直旋转角,单位为度,yaw 取值约 -180180,pitch 取值约 -9090,仅用于 rotated 子命令。
  • <维度> — 维度 ID 字符串,可选值见「维度 ID」表,用于 in 子命令。
  • <方块> — 方块 ID(如 stone、diamond_block、sand),用于 if block 和旧版 detect。
  • [数据值] — 方块的旧版数据值,整数 0-15,用于区分同一方块 ID 下的不同变体,现多被独立方块 ID 或方块状态取代。
  • <轴> — 需要对齐的坐标轴,x、y、z 的任意不重复组合(如 xyz、xz),用于 align 子命令。
  • <计分板目标> — 计分板目标名称(字符串,如 money),用于 if score 子命令。
  • <范围> — 整数范围,写法如 3(恰好 3)、3..(≥3)、..5(≤5)、3..5(3~5 闭区间),用于 if score ... matches。
  • <运算符> — 分数比较运算符,可选值见「运算符」表,用于两个分数之间的 if score 比较。
  • <命令> — 最终要执行的命令字符串,由 run 触发,必须放在整条命令末尾。

子命令一览

执行者与位置

子命令作用
as <目标>改变执行者,让 @s 指代目标;不改位置、角度、维度
at <目标>把执行位置、角度、维度设为目标的对应值;不改执行者
positioned <x> <y> <z>直接把执行位置设为指定坐标
positioned as <目标>只把执行位置设为目标的位置,不改角度与维度
rotated <yaw> <pitch>直接把执行角度设为指定值
rotated as <目标>把执行角度设为目标的角度
facing <x> <y> <z>让执行角度朝向指定坐标
facing entity <目标> [eyes/feet]让执行角度朝向目标实体的眼睛或脚底
align <轴>把执行位置沿指定轴向下取整,对齐到方块网格
anchored eyes/feet设定锚点为眼睛或脚底,改变 ^ 局部坐标的起点
in <维度>把执行维度切换为指定维度

条件判断

子命令作用
if entity <目标>指定实体存在时继续,替代旧版 /testfor
if block <x> <y> <z> <方块> [数据值]指定位置为指定方块时继续,替代旧版 /testforblock
if blocks <起点> <终点> <目标> [all/masked]两片区域方块匹配时继续,替代旧版 /testforblocks
if score <目标> <计分板目标> matches <范围>分数落入指定范围时继续
if score <目标> <计分板目标> <运算符> <源目标> <源计分板目标>两个分数比较成立时继续
unless <条件>上述任意条件的取反,条件不成立时继续

if blocks 的 all 表示区域内所有方块(含空气)都必须匹配,masked 表示忽略空气方块、只比较非空气方块。if block 可附带数据值或方块状态,未指定时忽略方块状态(相当于 -1)。

结束

子命令作用
run <命令>应用当前全部上下文后执行最终命令,放在链尾;可省略,省略时命令返回最后一个条件的判定结果

运算符

if score 比较两个分数时使用以下运算符:

运算符含义
=等于
<小于
<=小于等于
>大于
>=大于等于

维度 ID

维度ID
主世界overworld
下界nether
末地the_end

用 in 切换维度时会按维度比例缩放坐标:从主世界进入下界乘以 0.125,从下界返回主世界乘以 8。

示例

在所有玩家脚下放置钻石块:

/execute as @a at @s run setblock ~ ~-1 ~ diamond_block

遍历每个在线玩家,先把执行者切换为该玩家(as @a),再把执行位置移到该玩家处(at @s),最后在其脚下 1 格放置钻石块。多目标选择器使命令为每个玩家各执行一次。

在最近玩家头顶召唤闪电:

/execute at @p run summon lightning_bolt ~ ~2 ~

把执行位置移到最近玩家处但保留原执行者,然后在其头顶 2 格处召唤一道闪电。这里没有用 as,因此 @s 不会改变。

杀死站在沙子上的僵尸:

/execute as @e[type=zombie] at @s if block ~ ~-1 ~ sand run kill @s

遍历所有僵尸,对每个僵尸检测其脚下方块是否为 sand,是则杀死该僵尸。if block 在这里起到过滤器作用,条件不成立的僵尸会被跳过。

给分数达标的玩家显示标题:

/execute as @a if score @s money matches 100.. run title @s title "达标"

遍历每个玩家,检查其 money 计分板目标上的分数是否 ≥100,是则给该玩家显示标题「达标」。需要先用 /scoreboard 创建 money 目标。

用两个分数比较刷新最高纪录:

/execute as @a if score @s points > @s record run scoreboard players operation @s record = @s points

遍历每个玩家,比较其 points 与 record 两个计分板目标的分数,若当前分超过纪录分,则把 record 更新为 points 的值。

半径 10 格内没有僵尸时提示安全:

/execute as @a at @s unless entity @e[type=zombie,r=10] run title @s actionbar "附近安全"

遍历每个玩家,检查其 10 格半径内是否存在僵尸,不存在时向该玩家显示动作栏「附近安全」。unless 表示条件不成立时才继续执行。

在末地召唤末影龙:

/execute in the_end run summon ender_dragon 0 64 0

把执行维度切换到末地,然后在坐标 (0, 64, 0) 处召唤末影龙。in 只改维度,不改执行者与执行位置。

让粒子朝向玩家视线发射:

/execute at @p facing entity @p eyes run particle minecraft:basic_flame_particle ^ ^ ^1

把执行位置移到最近玩家处,并让执行朝向对准该玩家眼睛,然后在其视线前方 1 格发射火焰粒子。facing entity 会根据目标眼睛位置重新计算执行朝向。

把玩家对齐到所在方块中心:

/execute as @a at @s align xz run tp @s ~0.5 ~ ~0.5

遍历每个玩家,先取得其位置,再把 x、z 坐标向下取整对齐到方块网格(align xz),最后传送到该方块的中心点。

基岩版注意

  • 需要 OP 等级 2,这是基岩版中唯一需要等级 2 的命令。
  • 基岩版 1.19.50 起才支持子命令链语法;此前旧版 execute <目标> <位置> [detect ...] 语法已弃用,旧版 detect 是基岩版独有写法,Java 版从未有过。
  • 与 Java 版相比,基岩版缺少 store、summon、on 等子命令,无法把命令成功次数或结果写入计分板、方块数据或实体数据。
  • if/unless 判定失败时,整条命令链(包括 run)都不会执行,且命令会以失败返回,可被条件命令方块读取。
  • 用 in 跨维度时坐标会按维度比例缩放:主世界进入下界乘以 0.125,下界返回主世界乘以 8。
  • anchored eyes 在部分版本存在已知 bug,相对坐标也可能被抬高到眼睛高度,且一条命令中只能生效一次,多次书写不叠加。
  • 从命令方块执行时命令没有执行者,此时 @s 选择不到任何目标,需要先用 as 指定执行者。

常见问题

为什么我的命令里 `@s` 选不到目标?

@s 指代「当前执行者」。从命令方块发出的命令没有执行者,而 at、positioned、in 等子命令只改位置或维度、不改执行者。你需要先用 as <目标> 设定执行者,@s 才会解析到对应的实体。

旧版 `detect` 和新版 `if block` 有什么区别?

旧版 detect 必须跟在 execute <目标> <位置> 之后,只能检测方块,是基岩版旧语法的独有写法。新版 if block 是独立的子命令,可以放在子命令链的任意位置,还能附带数据值或方块状态;两者都等价于「指定位置是否为指定方块」的判定,但 detect 已随旧语法在 1.19.50 弃用。

`as @e` 会让后面的命令执行很多次吗?

会。当 as、at、positioned as 等子命令的选择器匹配到多个实体时,命令流会按匹配数量分叉,每个实体各执行一次后续子命令和 run,@s 依次指代每个实体。这正是用一条命令批量处理多个目标的原理。

`if score` 的 `matches` 范围怎么填?

使用整数范围语法:3 表示恰好等于 3,3.. 表示大于等于 3,..5 表示小于等于 5,3..5 表示 3 到 5 的闭区间。两个分数之间比较则改用运算符形式,例如 if score @s a >= @s b。

`if block` 需要写数据值吗?

不需要。数据值参数可省略,省略时忽略方块状态(相当于 -1),只匹配方块 ID 本身。只有当你需要区分同一方块 ID 下的不同变体时才需要附加数据值或方块状态。

相关命令

  • /tp — 传送实体到指定位置,常与 execute 的位置子命令配合
  • /scoreboard — 管理计分板目标与分数,是 if score 条件的数据来源
  • /tag — 管理实体标签,用于在 execute 中筛选实体
  • /setblock — 在指定位置放置方块,常用于 execute 的 run 目标
  • /summon — 生成实体,可配合 execute in 实现跨维度生成
  • /particle — 生成粒子效果,可配合 facing 控制粒子方向
  • /title — 向玩家显示标题或动作栏文字