查看或临时设置当前 CMD 会话的环境变量。
set 是 CMD 内建命令。不带参数时列出当前环境变量;set NAME=value 只在当前 cmd.exe 进程及其子进程中有效,关闭窗口即丢失。它常用于临时改 PATH、给脚本传参、拼接 JAVA_HOME 等:当前会话立刻生效,但不会写注册表。
边界:set 不是永久配置工具。新开的终端、Explorer 启动的程序、计划任务都看不到这里改的值;需要持久化用 setx。set /a 做整数运算,set /p 交互读取输入,这两个是批处理语法,不是常规的变量赋值。变量名不区分大小写,值区分大小写。
Windows 10/11 的 CMD 行为一致。PowerShell 用 $env:NAME = "value" 或 Set-Item Env:NAME,作用域同样是当前进程及其子进程,不会持久化;PowerShell 没有 set /a 的直接对应,用表达式计算。跨 shell 或跨会话传递环境变量,要靠 setx、注册表或父进程显式传递。
# 1. 列出全部环境变量,确认当前会话实际拿到的值
set
# 2. 只看 PATH,排查“命令找不到”时先看这里
set PATH
# 3. 临时设置变量,只影响当前窗口和它启动的程序
set JAVA_HOME=C:\Program Files\Java\jdk-21
# 4. 值含空格或特殊字符时用引号包住整个赋值,避免尾随空格
set "APP_CONFIG=C:\Program Files\My App\config.ini"
# 5. 在现有 PATH 前追加目录,仅当前会话有效
set PATH=%JAVA_HOME%\bin;%PATH%
# 6. 清空变量(等号后什么都不写),不是删除变量本身
set MY_FLAG=
# 7. 用 /a 做整数运算,适合批处理计数
set /a COUNT=%COUNT%+1
# 8. 用 /p 交互读取输入,适合临时脚本
set /p TARGET=请输入主机名:
set VAR = value 会把空格算进变量名或值,得到名为 VAR 的变量;用 set VAR=value 或 set "VAR=value",等号两侧不要加空格。验证:set VAR。( ... ) 代码块或 for 循环里 %VAR% 在解析时一次性展开,循环中一直拿旧值;用 setlocal enabledelayedexpansion 配合 !VAR!。PATH 只影响当前窗口及后续子进程;Explorer 启动的新程序和其他已开终端看不到。需要全局生效用 setx,然后重新打开终端。Path 和 PATH 是同一个;值里的分号分隔和路径顺序必须正确,路径含空格不需要额外引号。set 拼超长 PATH。PATH 后忘记恢复,后续命令会找不到;先 set OLD_PATH=%PATH%,结束时 set PATH=%OLD_PATH%,或用 setlocal/endlocal 隔离作用域。set 的输出包含 =C:=C:\... 这类内部变量,不要不加过滤地逐行解析;按前缀过滤,例如 set | findstr /B /I "JAVA_"。set /a 只支持整数,除法取整;未定义变量按 0 处理,负数和小数需要换其他方式。合上页面,先回答,再展开对照。
set 设置的变量,关闭 CMD 再打开还在吗?要永久生效用什么?for 循环里 %COUNT% 一直不变?应该怎么改?setx 并重新打开终端。%COUNT%;用 setlocal enabledelayedexpansion 和 !COUNT!。set "VAR=value with spaces",等号两侧不要留空格。
小程序版
微信扫码,随时查命令