系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

set

查看或临时设置当前 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=请输入主机名:

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 用 set 设置的变量,关闭 CMD 再打开还在吗?要永久生效用什么?
  2. 为什么在 for 循环里 %COUNT% 一直不变?应该怎么改?
  3. 如何安全地设置一个值含空格的变量?
答案
  1. 不在,只影响当前 cmd 进程及其子进程;永久生效用 setx 并重新打开终端。
  2. 代码块在解析时就展开了 %COUNT%;用 setlocal enabledelayedexpansion 和 !COUNT!。
  3. 用 set "VAR=value with spaces",等号两侧不要留空格。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令