start 命令是一个非常灵活的工具,能够帮助你管理命令行窗口和启动各种程序。这些组合技巧可以帮助你更高效地使用 start 命令,根据具体需求灵活运用。这些组合技巧能够帮助你在使用 start 命令时更加灵活和高效。
Windows START 命令完整拆解解构
一、基础定位
START 是 CMD 内置内部命令(Internal Command),不属于独立 exe 程序,宿主进程:cmd.exe。
语法主干
START ["窗口标题"] [命令/程序] [参数]
start notepad.exe
start "" "D:\test.txt"
start https://www.bing.com
start /min powershell.exe
start:CMD 内置;没有 start.exe;start≠runas;runas 负责凭据提权,start 负责进程创建与窗口控制;- PowerShell 中
Start-Process是等效替代(底层 API 一致,但参数体系不同)。
二、底层原理
1. 核心运行模型
cmd.exe 解析命令行识别 START 关键字,不走外部程序加载流程,直接在 cmd.exe 内部执行逻辑:- 解析参数:窗口标题、启动开关(
/MIN/MAX/WAIT/B/D等)、目标路径、命令参数; - 整理 STARTUPINFO / STARTUPINFOEX 结构体(Windows 原生进程启动结构体);
- 调用 Win32 API:
CreateProcess()/CreateProcessW()创建新进程; - 根据参数控制:是否新建控制台窗口、是否等待进程退出、窗口初始状态(最小化 / 最大化)。
2. 重要核心行为机制
(1)父子进程分离(最关键特性)
/WAIT 时:
cmd.exe 调用 CreateProcess 成功后立刻返回,不阻塞;
对比:直接运行notepad.exe,进程仍属于当前控制台;关闭 cmd 窗口,默认连带关闭子进程;使用start notepad.exe启动,进程独立性更强。
(2)空标题陷阱
start "D:\my app.exe"
start "" "D:\my app.exe"
(3)文件关联解析机制
.exe/.com/.bat 可执行文件:
start 调用 ShellExecuteEx() 而非 CreateProcessstart test.docx→ 使用系统默认 Word 打开;start https://xxx→ 调用默认浏览器;start D:\data→ 资源管理器打开文件夹。
两套 API 分支:可执行程序 →CreateProcessW文档 / URL / 目录 →ShellExecuteExW
(4)常用开关底层含义
| 参数 | 底层行为 |
|---|---|
/WAIT |
CreateProcess 后调用 WaitForSingleObject 等待子进程句柄,脚本阻塞直到程序退出 |
/B |
不创建新控制台窗口,程序在当前控制台后台运行;无窗口 |
/MIN |
STARTUPINFO 设置 wShowWindow=SW_SHOWMINNOACTIVE,启动最小化 |
/MAX |
最大化启动 |
/D 路径 |
设置进程初始工作目录(lpCurrentDirectory) |
三、依赖文件、组件、进程、注册表
1. 宿主本体
start 无独立 exe,实现代码内嵌于:
C:\Windows\System32\cmd.exe2. 核心依赖 Win32 系统库
kernel32.dllCreateProcessW、WaitForSingleObject、进程句柄管理 APIshell32.dllShellExecuteExW:文档、URL、文件夹关联打开逻辑user32.dll窗口显示状态控制(最小化 / 最大化)
3. 关联功能依赖项
- 文件关联配置:
HKCR(HKEY_CLASSES_ROOT)注册表存储扩展名默认打开程序; - 默认浏览器协议:
HKCR\http\shell\open\command; - 控制台窗口管理:
conhost.exe当 start 启动控制台程序时,系统生成独立conhost.exe承载新终端窗口。
4. 不依赖
- 不依赖 PowerShell;
- 不需要
wmic/taskkill; - 不属于 WMI 组件;
四、完整逻辑链路
链路 1:启动 EXE 可执行文件(start "" app.exe)
CMD命令行解析 → 识别内置命令START
↓
cmd.exe内部解析参数,分离【窗口标题】【程序路径】【启动参数】
↓
填充STARTUPINFO结构体(窗口样式、控制台属性)
↓
调用 kernel32!CreateProcessW 创建新进程
├─不加 /WAIT:CreateProcess成功立刻返回,脚本继续执行
└─加 /WAIT:等待进程内核对象,子进程退出才向下执行
↓
如需控制台 → 启动独立 conhost.exe
↓
cmd释放句柄(不等待场景),父子进程松散耦合
链路 2:打开文档 / URL(start test.txt/start https://xxx)
cmd解析START → 判断目标不是可执行程序
↓
调用 shell32!ShellExecuteExW
↓
读取HKCR注册表,查询后缀/协议对应的默认打开命令
↓
间接启动关联程序(notepad、浏览器、explorer.exe)
链路 3:/B 参数后台无窗口启动
start /B "" program.exe
↓
CreateProcess 传入标志:不分配新控制台
↓
进程附加到当前cmd控制台,不弹出新窗口
⚠️输出会打印到当前控制台;无法单独关闭窗口
五、配套联动技术栈(承接前文所有条目)
- CMD / Batch 脚本
批量运维脚本核心命令;常用于并行启动多程序。
- PowerShell
Start-Process功能等价,底层同样封装 CreateProcess / ShellExecuteEx;适合 PS 脚本场景。 - Windows 资源管理器、
explorer.exestart ./start D:\间接调用 explorer 打开目录。 - 进程权限、UAC、
runasstart无法直接提升权限;需要提权要组合runas,或使用start "" powershell -Command Start-Process xxx -Verb RunAs。 - 网络数据包(Packet)
start https://xxx启动浏览器,最终产生 HTTP/TCP 数据包;start 本身不参与网络传输,仅负责拉起进程。 - WebDAV / 网络位置、
wznwiz.exe脚本可使用start "" "\\nas\share"一键打开网络共享文件夹。 - Windows 凭据管理器
start 仅创建进程,进程内业务自主读取凭据,start 本身不处理账号密码。
- 防火墙规则、网络位置
start 只负责启动程序;程序联网是否放行,由防火墙与网络位置策略管控。
六、典型故障断链场景
- 带空格路径直接报错
start D:\my program\app.exe
-
加引号启动直接弹出新 cmd 窗口,程序没运行原因:忘记空标题占位,系统把路径当成窗口标题。✅
start "" "D:\my app.exe" -
脚本顺序错乱,多个程序同时启动原因:未使用
/WAIT;start 默认异步不阻塞。 -
/B 后台运行程序,控制台输出刷屏无法关闭/B 模式进程共享当前控制台,程序 stdout 持续输出;建议搭配重定向
>nul 2>&1。 -
start 启动批处理无法等待退出批处理 (.bat) 属于 cmd 脚本,使用 start 启动会新开 cmd;如需等待必须搭配
/WAIT。 -
无法启动提升权限程序start 本身没有 UAC 提权参数,不能替代 runas。
安全视角
- 恶意批处理大量使用
start并行启动多个恶意进程; start可直接拉起 URL、远程共享程序,易被用于加载网络载荷;- 参数解析漏洞:未正确处理引号,可能造成命令注入。
七、高频运维示例
:: 最小化启动程序,不阻塞脚本
start /min "" "D:\tools\server.exe"
:: 等待程序关闭后继续执行脚本
start /wait "" "D:\installer.exe"
:: 后台无窗口启动,屏蔽输出
start /b "" "service.exe" >nul 2>&1
:: 打开网址
start https://www.baidu.com
:: 打开文件夹
start D:\Data
八、极简总结
START是 cmd.exe 内置内部命令,不存在 start.exe;- 底层两套 API:可执行文件用
CreateProcessW;文档 / URL 使用ShellExecuteExW; - 核心特性:默认异步创建进程、可新建独立控制台窗口;
/WAIT实现阻塞等待; - 语法硬性规范:带引号路径必须前置一对空引号作为窗口标题;
/B不在新开窗口,进程附着当前控制台;- 只负责进程创建,不具备权限提升、网络通信能力;
- 高频踩坑:引号顺序错误、忘记空标题、不理解异步行为导致脚本时序异常。
CMD START ↔ PowerShell Start-Process 参数完整迁移对照表
说明:
Start-Process别名:saps- CMD
START为 cmd.exe 内置命令;PowerShellStart-Process基于.NET System.Diagnostics.Process- 标【⚠️】代表行为存在差异、有坑;标【❌】代表无原生等价能力;标【✅】完全等效
- CMD 语法坑提醒:带空格路径必须前置空引号
start "" "path";PowerShell 不存在该陷阱
一、启动控制、窗口样式参数对照表
| CMD START 参数 | 功能说明 | PowerShell Start-Process 等效写法 | 等效程度 | 备注 |
|---|---|---|---|---|
start "" app.exe |
正常新建窗口启动程序 | Start-Process -FilePath "app.exe" |
✅ | PowerShell 无需空标题占位 |
/MIN |
最小化启动窗口 | -WindowStyle Minimized |
✅ | |
/MAX |
最大化启动窗口 | -WindowStyle Maximized |
✅ | |
/B |
不创建新控制台,附加当前窗口运行 | -NoNewWindow |
⚠️ | CMD /B 会共享控制台输出;PowerShell -NoNewWindow 同样共享控制台;RunAs 模式不能搭配此参数 |
/WAIT |
阻塞脚本,等待进程退出再继续执行 | -Wait |
⚠️ | CMD /WAIT 全部场景生效;PowerShell:搭配 -Verb RunAs 时 -Wait 经常失效(ShellExecute 原生限制) |
/D "目录" |
设置进程初始工作目录 | -WorkingDirectory "目录路径" |
✅ | |
"窗口标题" |
设置控制台窗口标题 | 无直接参数 | ❌ | Start-Process 没有原生窗口标题参数;需要启动后通过 API 修改或启动包裹脚本 |
二、权限、提权、动词相关
| CMD START 参数 | 功能说明 | PowerShell Start-Process 等效写法 | 等效程度 | 备注 |
|---|---|---|---|---|
start runas /user:账户 app.exe |
使用其他账号启动程序 | -Credential (Get-Credential) |
⚠️ | API 不同:CMD runas ≈ CreateProcessWithLogonW;PowerShell -Credential 同样调用该 API;≠管理员提权 |
start "" app.exe + 手动 UAC 弹窗 |
以管理员权限启动 | -Verb RunAs |
⚠️ | CMD 没有内置 start 提权开关;PowerShell -Verb RunAs 使用ShellExecuteExW触发 UAC;
-NoNewWindow、无法原生捕获 stdout |
三、打开文档、URL、文件夹(Shell 调用分支)
| CMD 写法 | 功能说明 | PowerShell 等效写法 | 等效程度 |
|---|---|---|---|
start https://www.bing.com |
使用默认浏览器打开网址 | Start-Process https://www.bing.com |
✅ |
start D:\Folder |
资源管理器打开文件夹 | Start-Process "D:\Folder" |
✅ |
start test.docx |
使用关联程序打开文档 | Start-Process "test.docx" |
✅ |
四、命令行参数传递
CMD
start "" "D:\tools\app.exe" -arg1 value
PowerShell
Start-Process -FilePath "D:\tools\app.exe" -ArgumentList "-arg1","value"
⚠️迁移重点坑:CMD 直接在程序后拼接参数;PowerShell必须使用-ArgumentList数组传递参数,不要直接拼接字符串,避免空格解析错乱。
五、CMD START 不存在、PowerShell 独有能力(迁移增益)
| PowerShell 参数 | 能力说明 |
|---|---|
-RedirectStandardOutput |
捕获程序标准输出写入文件 |
-RedirectStandardError |
捕获错误输出 |
-RedirectStandardInput |
重定向标准输入 |
-PassThru |
返回进程对象(可获取 PID、主动 Kill) |
-WindowStyle Hidden |
完全隐藏窗口(CMD START 无原生隐藏) |
六、PowerShell 不存在、CMD START 独有能力
- 原生设置控制台窗口标题;
/SEPARATE//SHARED(16 位旧程序虚拟机隔离,现代系统几乎废弃)
七、高频标准迁移范例
范例 1:CMD 原版
start /min /wait /D "D:\Work" "" "My App.exe" -runmode service
迁移 PowerShell
Start-Process -FilePath "My App.exe" `
-ArgumentList "-runmode","service" `
-WorkingDirectory "D:\Work" `
-WindowStyle Minimized `
-Wait
范例 2:CMD 后台无窗口运行
start /B "" server.exe >nul 2>&1
迁移 PowerShell
Start-Process -FilePath "server.exe" -NoNewWindow
范例 3:管理员提权(CMD 无原生等价)
Start-Process powershell -Verb RunAs
八、迁移避坑清单(重点)
- ❌ 不要照搬 CMD 习惯:PowerShell不需要前置空标题引号;
- ⚠️ 所有外部程序参数统一放入
-ArgumentList,推荐数组格式; - ⚠️
-Verb RunAs不能和-NoNewWindow同时使用;RunAs 场景-Wait不可靠; - ⚠️ 需要捕获控制台输出 → 禁止使用 RunAs;
- ⚠️
/B≈-NoNewWindow,但后台输出会打印到当前终端; - ⚠️ 如果需要同步执行、不需要窗口控制,PowerShell 优先直接调用
& .\app.exe,不需要 Start-Process。
为了更好地理解和分类 START 命令的各个功能参数,可以将其按功能分为以下几个类别,并整理成表格形式:
| 类别 | 参数 | 描述 |
|---|---|---|
| 窗口配置 | ["title"] |
在窗口标题栏显示的标题。 |
/D path |
设置程序的启动目录。 | |
/MIN |
启动窗口并最小化。 | |
/MAX |
启动窗口并最大化。 | |
/SEPARATE |
启动16位 Windows 程序,在单独的内存空间中运行。 | |
/SHARED |
启动16位 Windows 程序,在共享内存空间中运行。 | |
B |
启动应用程序而不创建新窗口。应用程序禁用 Ctrl+C 处理,只有 Ctrl+Break 可中断应用程序。 |
|
I |
使用原始环境变量,而不是当前环境。 | |
| 优先级设置 | /LOW |
设置应用程序的优先级为空闲优先级(IDLE)。 |
/NORMAL |
设置应用程序的优先级为正常优先级(NORMAL)。 | |
/HIGH |
设置应用程序的优先级为高优先级(HIGH)。 | |
/REALTIME |
设置应用程序的优先级为实时优先级(REALTIME)。 | |
/ABOVENORMAL |
设置应用程序的优先级为高于正常优先级(ABOVENORMAL)。 | |
/BELOWNORMAL |
设置应用程序的优先级为低于正常优先级(BELOWNORMAL)。 | |
| 处理器亲和性 | /NODE <NUMA node> |
指定 NUMA 节点,优先选择指定的节点进行处理。 |
/AFFINITY <hex affinity mask> |
设置处理器亲和性掩码,指定进程运行在哪些处理器上。掩码以十六进制表示。 | |
| 其他功能 | /WAIT |
启动应用程序并等待其终止。 |
| `/MACHINE <x86 | amd64 | |
| 命令或程序 | command/program |
需要启动的命令或程序。如果是内部命令或批处理文件,将使用 /K 开关执行。否则运行应用程序。 |
parameters |
传递给命令或程序的参数。 |
各个参数的功能详细说明:
- 窗口配置类:控制启动的窗口状态,如标题、启动目录、窗口大小等。
- 优先级设置类:用于设置启动程序时的优先级,影响操作系统如何分配资源给该程序。
- 处理器亲和性类:用于优化程序在多核处理器或 NUMA(非一致性内存架构)系统中的执行效率,控制程序在哪些处理器上运行。
- 其他功能:包括等待程序完成、指定机器架构等附加功能。
- 命令或程序类:用于指定要启动的命令或应用程序,并传递参数。
示例:
-
启动一个程序并最小化窗口:
cmdCopy Codestart /MIN myprogram.exe -
启动程序并设置其优先级为高:
cmdCopy Codestart /HIGH myprogram.exe -
启动程序并指定其 NUMA 节点和亲和性:
cmdCopy Codestart /NODE 1 /AFFINITY 0x3 myprogram.exe -
启动程序并在等待其完成后返回:
cmdCopy Codestart /WAIT myprogram.exe
通过这样的分类和表格化,可以更加清晰地理解和使用 START 命令的不同功能。
你可以把电脑的 CPU(处理器)想象成一个餐厅的后厨,里面有多个厨师(处理器核心)。
1. 基础概念:/AFFINITY (指定具体哪位厨师来做菜)
-
命令:
start /AFFINITY 掩码 程序.exe -
通俗解释:这个命令就像是你点菜时,指定必须由后厨里的某几位厨师来为你做这道菜。
-
“十六进制掩码”:这是一个数字,它像一张轮班表,用二进制来表示哪些厨师可以工作。
-
例如,一个4核CPU,掩码
3的二进制是0011。这代表:-
厨师1(核心0):可以工作(1)
-
厨师2(核心1):可以工作(1)
-
厨师3(核心2):不工作(0)
-
厨师4(核心3):不工作(0)
-
-
所以,你启动的程序只会跑在核心0和核心1上。
-
简单来说:/AFFINITY 就是让你精确控制程序可以使用哪些CPU核心。
2. 高级用法:/AFFINITY 和 /NODE 结合(指定区域和厨师)
现在,我们把后厨扩大,分成两个独立的区域(NUMA节点),比如中餐区(节点0) 和西餐区(节点1)。每个区域都有自己的厨师。
-
命令:
start /NODE 1 /AFFINITY 掩码 程序.exe -
通俗解释:这个命令的意思是:
-
首先,你指定这道菜必须在 西餐区(节点1) 制作。(
/NODE 1) -
然后,你在西餐区内部,再指定具体由哪几位厨师来做。(
/AFFINITY 掩码)
-
这里的“掩码”解释方式变了,这是关键点:
技术文档里说“将 NUMA 节点的处理器掩码向右移位以从零位开始”,意思是:
-
这个掩码不再是针对整个后厨,而是只针对你指定的那个区域(节点)。
-
比如,西餐区(节点1)有4个厨师(核心4,5,6,7)。当你使用
/AFFINITY 3(二进制0011)时:-
这个掩码会应用到西餐区内部,从它的第一个厨师开始算起。
-
所以
0011就代表:-
西餐区的厨师1(核心4):可以工作(1)
-
西餐区的厨师2(核心5):可以工作(1)
-
西餐区的其他厨师:不工作(0)
-
-
最终效果是:程序被限制在“西餐区”里,并且只使用该区域内的核心4和核心5。
3. 特殊情况:如果没有匹配的厨师
-
通俗解释:如果你指定的区域(比如西餐区)里,你要求的那几位厨师正好都请假了(即掩码指定的核心在该节点上不存在),那怎么办呢?
-
规则是:那就放宽要求,只要是在西餐区的厨师,谁都可以来做这道菜。程序还是会在这个NUMA节点上运行,但不再限制具体用哪个核心。
你可以把 start /NODE /AFFINITY 想象成一个两步点餐法:
-
选区域 (
/NODE):先决定在“中餐区”还是“西餐区”做菜。 -
选厨师 (
/AFFINITY):然后在这个区域内部,再点名要哪几位厨师。
这样结合使用,可以更好地优化程序性能,尤其是在服务器等多CPU插槽(NUMA架构)的系统上,能让程序和数据离得更近,跑得更快。
按功能分类整理的 START 命令的参数,并将其表格化以便更清晰理解。
START 命令参数分类表
| 类别 | 参数 | 描述 |
|---|---|---|
| 窗口配置 | /MIN |
启动窗口并最小化. |
/MAX |
启动窗口并最大化. | |
/SEPARATE |
启动 16 位 Windows 程序,在单独的内存空间中运行(64 位平台不支持)。 | |
/SHARED |
启动 16 位 Windows 程序,在共享内存空间中运行(64 位平台不支持)。 | |
/D path |
设置程序的启动目录. | |
["title"] |
设置窗口的标题栏内容. | |
| 优先级设置 | /LOW |
设置程序的优先级为空闲优先级(IDLE)。 |
/NORMAL |
设置程序的优先级为正常优先级(NORMAL)。 | |
/HIGH |
设置程序的优先级为高优先级(HIGH)。 | |
/REALTIME |
设置程序的优先级为实时优先级(REALTIME)。 | |
/ABOVENORMAL |
设置程序的优先级为高于正常优先级(ABOVENORMAL)。 | |
/BELOWNORMAL |
设置程序的优先级为低于正常优先级(BELOWNORMAL)。 | |
| 处理器亲和性 | /NODE <NUMA node> |
在 NUMA 系统上指定 NUMA 节点,使进程在指定节点的内存上运行,以优化内存访问。 |
/AFFINITY <hex affinity mask> |
设置进程的处理器亲和性掩码,指定程序在哪些处理器上运行,掩码值为十六进制。 | |
| 等待与启动控制 | /WAIT |
启动应用程序并等待其完成后返回命令提示符。 |
| `/MACHINE <x86 | amd64 | |
| 命令执行与文件关联 | command/program |
启动的程序或命令。如果是内部命令或批处理文件,将使用 /K 开关执行。否则运行指定的应用程序或命令。 |
parameters |
传递给程序的命令行参数。 | |
non-executable files |
启动非可执行文件时通过文件关联启动,例如 .DOC 文件会启动与其关联的应用程序(如 Word)。 |
说明
-
窗口配置类:
- 控制启动程序时窗口的显示状态(最小化、最大化等)。
/SEPARATE和/SHARED用于 16 位程序,但 64 位平台不支持。["title"]用于设置命令提示符窗口的标题。
-
优先级设置类:
/LOW、/NORMAL、/HIGH、/REALTIME等选项控制程序启动时的优先级。优先级决定操作系统为程序分配资源的多少,/REALTIME优先级会使程序得到几乎所有的系统资源。
-
处理器亲和性类:
/NODE和/AFFINITY用于在 NUMA(非一致性内存架构)系统上优化程序的内存和 CPU 亲和性,使得程序能够在特定的 NUMA 节点上运行,从而提高效率和降低延迟。特别是当进程间有频繁的内存共享时,选择合适的 NUMA 节点和处理器可以显著提升性能。
-
等待与启动控制:
/WAIT使START命令等待被启动的程序执行完毕再返回控制台。/MACHINE指定了程序运行的架构类型(如x86、amd64等),适用于有多种架构的环境。
-
命令执行与文件关联:
- 如果启动的是非可执行文件(如
.DOC文件),则会根据文件的关联类型启动对应的应用程序。 - 使用
command/program启动指定程序时,可以传递参数。 - 如果第一个令牌是
"CMD",则会根据COMSPEC环境变量确定 CMD.EXE 的路径,避免当前目录中的 CMD.EXE 被意外调用。
- 如果启动的是非可执行文件(如
示例
-
启动程序并最小化:
cmdCopy Codestart /MIN myprogram.exe -
设置程序为高优先级并运行:
cmdCopy Codestart /HIGH myprogram.exe -
在指定 NUMA 节点上运行两个进程,并设置处理器亲和性:
cmdCopy Codestart /NODE 1 /AFFINITY 0x3 application1.exe start /NODE 1 /AFFINITY 0xc application2.exe -
启动程序并等待其完成:
cmdCopy Codestart /WAIT myprogram.exe -
通过文件关联启动 Word 文档:
cmdCopy Codestart myfile.doc
通过这种分类表格和详细说明,您可以更加清晰地理解 START 命令的各项功能,并能够在实际操作中灵活运用这些参数。
START 命令在不同版本的 Windows 系统中有些许差异,尤其是在 Windows 7、Windows 8、Windows 10、Windows 11 等操作系统中。以下是 START 命令在不同版本 Windows 中的一些常见差异,表格化呈现。
START 命令 版本差异表
| 功能/版本 | Windows XP | Windows Vista / 7 | Windows 8 / 8.1 | Windows 10 / 11 |
|---|---|---|---|---|
| 基本用法 | 支持基本用法 | 支持基本用法 | 支持基本用法 | 支持基本用法 |
| /MIN (最小化窗口) | 支持 | 支持 | 支持 | 支持 |
| /MAX (最大化窗口) | 支持 | 支持 | 支持 | 支持 |
| /SEPARATE (16 位程序) | 支持 | 支持 | 支持 | 支持(仅限 32 位系统) |
| /SHARED (16 位程序共享内存) | 支持 | 支持 | 支持 | 支持(仅限 32 位系统) |
| /WAIT (等待程序完成) | 支持 | 支持 | 支持 | 支持 |
| /LOW / NORMAL / HIGH (优先级) | 支持 | 支持 | 支持 | 支持 |
| /REALTIME (实时优先级) | 不支持 | 支持 | 支持 | 支持 |
| /ABOVENORMAL (高于正常优先级) | 不支持 | 支持 | 支持 | 支持 |
| /BELOWNORMAL (低于正常优先级) | 不支持 | 支持 | 支持 | 支持 |
| /NODE (NUMA 节点) | 不支持 | 不支持 | 支持 | 支持 |
| /AFFINITY (处理器亲和性) | 不支持 | 支持 | 支持 | 支持 |
| 程序路径 | 支持相对路径和绝对路径 | 支持相对路径和绝对路径 | 支持相对路径和绝对路径 | 支持相对路径和绝对路径 |
| /MACHINE <架构> | 不支持 | 不支持 | 支持 | 支持 |
| 执行非可执行文件 | 支持通过文件关联 | 支持通过文件关联 | 支持通过文件关联 | 支持通过文件关联 |
| /K (保持命令行窗口) | 支持 | 支持 | 支持 | 支持 |
| CMD 启动时的默认行为 | 默认为 cmd.exe |
默认为 cmd.exe |
默认为 cmd.exe |
默认为 cmd.exe |
| 控制台窗口标题 | 支持 ["title"] |
支持 ["title"] |
支持 ["title"] |
支持 ["title"] |
主要差异概述
-
/SEPARATE 和 /SHARED:
- 这两个选项支持 16 位程序运行,但在 64 位版本的 Windows 中不被支持。如果你使用的是 64 位操作系统,它们无法运行在 64 位 Windows 上。
-
/REALTIME, /ABOVENORMAL, /BELOWNORMAL:
- 这些优先级控制选项在 Windows XP 中不支持。在 Windows Vista 及以后版本中得到支持,允许更细粒度的控制程序的优先级。
-
/NODE 和 /AFFINITY:
- 这两个选项在 Windows XP 中不可用,但在 Windows 7 及以后版本的 Windows 中支持。它们用于控制程序在哪些 NUMA 节点或 CPU 核心上运行,以优化系统性能。
-
/MACHINE <架构>:
- 在 Windows 8 及之后的版本中,
/MACHINE参数支持指定程序的架构,如x86、amd64、arm和arm64,但 Windows XP 和 Windows Vista 不支持该选项。
- 在 Windows 8 及之后的版本中,
-
程序路径:
- 在所有版本中,
START都支持通过相对路径和绝对路径启动程序,但 Windows XP 和更高版本之间的路径解析有所不同,特别是在支持的字符集方面。
- 在所有版本中,
-
命令窗口标题:
- 在所有 Windows 版本中,
START都支持设置命令提示符窗口的标题。
- 在所有 Windows 版本中,
示例使用(适用于不同版本)
-
启动一个程序并设置优先级为高:
cmdCopy Codestart /HIGH myprogram.exe -
在特定 NUMA 节点上启动程序(仅支持 Windows 7 及以后版本):
cmdCopy Codestart /NODE 1 myprogram.exe -
启动并等待程序完成:
cmdCopy Codestart /WAIT myprogram.exe -
指定机器架构启动程序(仅适用于 Windows 8 及以后版本):
cmdCopy Codestart /MACHINE amd64 myprogram.exe
通过这种表格和说明,可以帮助用户理解在不同 Windows 版本中 START 命令的支持差异,并选择适合自己环境的参数进行操作。
START:启动一个单独的窗口来运行指定的程序或命令。
START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
[/MACHINE <x86|amd64|arm|arm64>][command/program] [parameters]
-
"title"
在窗口标题栏中显示的标题。 -
path
启动的目录。 -
B
启动应用程序时不创建新窗口。该应用程序的^C处理将被忽略。除非应用程序启用了^C处理,否则^Break是唯一能中断应用程序的方式。 -
I
新的环境将是传递给cmd.exe的原始环境,而不是当前的环境。 -
MIN
启动时将窗口最小化。 -
MAX
启动时将窗口最大化。 -
SEPARATE
在单独的内存空间中启动16位Windows程序。 -
SHARED
在共享的内存空间中启动16位Windows程序。 -
LOW
以空闲优先级类启动应用程序。 -
NORMAL
以正常优先级类启动应用程序。 -
HIGH
以高优先级类启动应用程序。 -
REALTIME
以实时优先级类启动应用程序。 -
ABOVENORMAL
以高于正常优先级类启动应用程序。 -
BELOWNORMAL
以低于正常优先级类启动应用程序。 -
NODE
指定首选的非统一内存架构(NUMA)节点,作为十进制整数。 -
AFFINITY
指定处理器亲和性掩码,作为十六进制数。该进程将被限制在这些处理器上运行。当
/AFFINITY和/NODE组合使用时,亲和性掩码的解释有所不同。将亲和性掩码指定为NUMA节点的处理器掩码右移后从位0开始的值。该进程将被限制在指定的亲和性掩码和NUMA节点之间共有的处理器上运行。如果没有共享的处理器,则该进程将仅在指定的NUMA节点上运行。 -
WAIT
启动应用程序并等待其终止。 -
MACHINE
指定应用程序进程的机器架构。 -
command/program
如果它是内部cmd命令或批处理文件,则会以/K开关运行命令处理器cmd.exe。这意味着在命令执行完毕后,窗口将保持打开。如果它不是内部
cmd命令或批处理文件,则它是一个程序,会作为窗口化应用程序或控制台应用程序运行。 -
parameters
这些是传递给命令/程序的参数。
注意: SEPARATE 和 SHARED 选项不支持 64 位平台。
指定 /NODE 允许在 NUMA 系统上创建利用内存局部性的进程。例如,两个通过共享内存进行大量通信的进程可以被创建为共享相同的首选 NUMA 节点,以最小化内存延迟。当可能时,它们从相同的 NUMA 节点分配内存,并且可以在指定节点外的处理器上运行。
例如:
start /NODE 1 application1.exe
start /NODE 1 application2.exe
这两个进程可以进一步约束在相同 NUMA 节点内的特定处理器上运行。在下面的示例中,application1 运行在节点的低位两个处理器上,而 application2 运行在该节点的下两个处理器上。此示例假设指定的节点至少有四个逻辑处理器。请注意,可以将节点号更改为该计算机上任何有效的节点号,而无需更改亲和性掩码。
start /NODE 1 /AFFINITY 0x3 application1.exe
start /NODE 1 /AFFINITY 0xc application2.exe
如果启用了命令扩展,通过命令行或 START 命令调用外部命令时,会发生以下变化:
-
通过文件关联直接调用不可执行文件,只需输入文件名即可作为命令执行。(例如,输入
WORD.DOC会启动与.DOC文件扩展名关联的应用程序)。有关如何从命令脚本中创建这些关联,请参阅ASSOC和FTYPE命令。 -
当执行一个 32 位 GUI 应用程序时,
CMD.EXE不会等待应用程序终止后再返回命令提示符。如果在命令脚本中执行,则不会发生这种新行为。 -
当执行一个命令行,第一个标记是字符串
"CMD "且没有扩展名或路径限定符时,CMD会被替换为COMSPEC变量的值。这防止从当前目录中调用CMD.EXE。 -
当执行的命令行第一个标记没有扩展名时,
CMD.EXE会使用PATHEXT环境变量的值来确定要查找的扩展名及其顺序。PATHEXT变量的默认值是:Copy Code.COM;.EXE;.BAT;.CMD注意,语法与
PATH变量相同,使用分号分隔不同的元素。 -
在搜索可执行文件时,如果没有任何扩展名匹配,
CMD.EXE会查看名称是否与目录名匹配。如果匹配,START命令会在该路径上启动资源管理器。如果从命令行执行,这相当于执行CD /D切换到该路径。
CMD 中的 start 命令可以用于打开新的命令行窗口或启动应用程序。以下是一些常见的用法示例:
1. 启动一个新的命令行窗口
start cmd
2. 启动指定的程序
例如,打开记事本:
start notepad
3. 启动网页
打开一个网页,例如 Google:
start http://www.google.com
4. 指定窗口标题
你可以为新窗口指定一个标题:
start "My Command Prompt" cmd
5. 启动一个批处理文件
例如,启动一个名为 script.bat 的批处理文件:
start script.bat
6. 启动程序并指定工作目录
在指定目录下启动程序:
start "My Program" /d "C:\Path\To\Directory" myprogram.exe
7. 启动多个程序
同时启动多个程序:
start notepad
start calc
8. 使用参数启动程序
如果你需要向程序传递参数:
start "My Program" myprogram.exe arg1 arg2
9. 启动应用并将命令传递给它
启动 PowerShell 并执行命令:
start powershell -Command "Get-Process"
10. 以管理员身份启动命令
虽然 start 本身不能直接以管理员身份启动,但可以通过以下方式:
runas /user:Administrator "cmd /k start cmd"
start 命令是一个非常灵活的工具,能够帮助你管理命令行窗口和启动各种程序。
CMD start 命令的高级用法和技巧示例:
11. 启动程序并在后台运行
你可以使用 start 命令启动一个程序并在后台运行(不过这种方法有时依赖于具体的程序实现):
start /B notepad
12. 使用 start 打开特定文件类型
你可以使用 start 打开特定类型的文件。例如,打开一个 .txt 文件:
start example.txt
13. 启动 Windows 资源管理器
打开某个文件夹:
start explorer "C:\Path\To\Folder"
14. 使用 start 运行系统工具
启动系统工具,比如设备管理器:
start devmgmt.msc
15. 指定运行的优先级
虽然 start 命令本身不直接支持优先级设置,但你可以使用 start 结合 cmd 的 /min、/max、/low 等选项:
start /min notepad
16. 启动程序并指定 CPU 优先级
使用 start 命令结合 cmd 的 start 指令设置进程优先级:
start /high myprogram.exe
17. 启动应用程序并重定向输出
将程序的输出重定向到文件:
start cmd /c "myprogram.exe > output.txt"
18. 使用 timeout 延时启动
在启动一个程序之前添加延时:
timeout /t 5 && start notepad
19. 使用 start 执行 PowerShell 脚本
启动 PowerShell 脚本:
start powershell -File "C:\Path\To\Script.ps1"
20. 启动特定的应用程序并使用参数
打开特定的应用程序并传递参数,例如打开 Chrome 并访问一个网址:
start chrome "http://www.example.com"
21. 使用环境变量
在 start 命令中使用环境变量:
start %windir%\notepad.exe
22. 用 tasklist 和 taskkill 结合 start
查看运行中的进程,并选择性地结束某个进程后启动新的进程:
taskkill /IM myprogram.exe /F && start myprogram.exe
start 命令是一个非常强大的工具,可以用于多种场景,包括启动应用程序、打开文件、管理进程等。
CMD start 命令的高级技巧和用法:
23. 使用 start 启动特定版本的程序
如果你有多个版本的某个程序,可以通过完整路径指定:
start "My App" "C:\Path\To\Version2\myapp.exe"
24. 设置窗口大小
使用 start 命令时,你可以控制窗口的初始大小和位置,但这通常需要额外的工具或批处理脚本。
25. 使用 start 结合批处理逻辑
在批处理文件中,可以根据条件使用 start 命令来控制程序的启动:
@echo off
if exist "C:\Path\To\MyApp.exe" (
start "My App" "C:\Path\To\MyApp.exe"
) else (
echo MyApp not found.
)
26. 启动应用程序并设置其工作目录
在启动程序时,你可以指定工作目录,以便程序在正确的上下文中运行:
start /d "C:\Path\To\Directory" myprogram.exe
27. 使用 /WAIT 参数
如果你希望在启动应用程序后等待它完成执行,可以使用 /WAIT 参数:
start /WAIT myprogram.exe
28. 使用 start 结合 cmd 和管道
你可以结合管道使用 cmd 和 start 命令来处理输出或错误:
start cmd /c "myprogram.exe | findstr 'error'"
29. 启动脚本并传递参数
启动批处理或脚本并传递参数:
start myscript.bat arg1 arg2
30. 启动多个窗口并指定不同参数
同时打开多个窗口,并为每个窗口传递不同的参数:
start "Window 1" myprogram.exe param1
start "Window 2" myprogram.exe param2
31. 检查程序是否运行并启动
在启动程序之前检查它是否已经在运行:
tasklist | find /I "myprogram.exe" >nul
if errorlevel 1 (
start myprogram.exe
) else (
echo MyProgram is already running.
)
32. 在任务计划程序中使用 start
你可以使用 start 命令创建或运行计划任务:
start schtasks /create /tn "My Task" /tr "C:\Path\To\myprogram.exe" /sc daily /st 10:00
33. 启动具有特定用户权限的应用程序
使用 runas 命令结合 start 启动应用程序:
runas /user:Username "start myprogram.exe"
34. 启动应用程序并使用不同的文件编码
如果你的程序支持编码选项,可以在启动时指定:
start myprogram.exe --encoding UTF-8
35. 创建快捷方式的脚本
使用 start 命令创建程序快捷方式的批处理脚本:
@echo off
set shortcutPath="%USERPROFILE%\Desktop\MyApp.lnk"
set targetPath="C:\Path\To\myapp.exe"
echo [InternetShortcut] > %shortcutPath%
echo URL=%targetPath% >> %shortcutPath%
通过使用 start 命令,你可以非常灵活地管理应用程序的启动、配置和控制。
CMD start 命令的更多技巧和用法:
36. 启动多个实例的应用程序
如果你想启动同一应用程序的多个实例,可以使用 /B 参数:
start /B myprogram.exe
37. 使用环境变量
在 start 命令中,可以使用环境变量以便动态指定路径或参数:
set MYAPP="C:\Path\To\MyApp.exe"
start %MYAPP%
38. 指定优先级
虽然 start 命令本身不直接支持设置优先级,但你可以结合 start 和 wmic 命令来调整进程优先级:
start myprogram.exe
wmic process where name="myprogram.exe" call setpriority "high priority"
39. 在后台运行应用程序
你可以通过 start 启动程序而不打开新的窗口:
start /B myprogram.exe
40. 启动网页
通过 start 打开网页:
start https://www.example.com
41. 在指定时间后启动应用程序
使用 timeout 命令延迟启动:
timeout /t 10
start myprogram.exe
42. 通过网络路径启动程序
你可以从网络路径启动应用程序:
start "\\NetworkPath\SharedFolder\myprogram.exe"
43. 使用 start 来打开文件
你可以直接使用 start 命令打开文件(例如文档、图片等):
start "My Document" "C:\Path\To\mydocument.docx"
44. 定时启动程序
如果需要定时启动程序,可以结合 schtasks 命令:
schtasks /create /tn "My Scheduled Task" /tr "C:\Path\To\myprogram.exe" /sc once /st 12:00
45. 执行 PowerShell 脚本
你可以通过 start 命令启动 PowerShell 脚本:
start powershell -File "C:\Path\To\myscript.ps1"
46. 启动带有特定窗口标题的程序
使用 start 命令时,可以指定窗口标题:
start "My Custom Title" myprogram.exe
47. 使用 CMD 参数
如果需要向 CMD 传递参数,可以这样做:
start cmd /k "echo Hello World"
48. 启动批处理文件并隐藏窗口
可以使用 start 和 cmd 的组合隐藏窗口:
start /B cmd /c myscript.bat
49. 创建带图标的快捷方式
如果需要创建具有特定图标的快捷方式,可以使用 VBScript:
Set oWS = WScript.CreateObject("WScript.Shell")
sLinkFile = "C:\Path\To\Shortcut.lnk"
Set oLink = oWS.CreateShortcut(sLinkFile)
oLink.TargetPath = "C:\Path\To\myprogram.exe"
oLink.IconLocation = "C:\Path\To\icon.ico"
oLink.Save
50. 启动 Docker 容器
如果你使用 Docker,可以通过 start 命令启动容器:
start docker run -d mycontainer
以上这些技巧展示了 CMD start 命令的强大和灵活性。无论是打开程序、文件,还是执行脚本,都能帮助你更高效地使用命令行。
关于 start 命令的组合使用技巧:
1. 与 cmd 结合
可以使用 start 启动新的命令窗口并运行命令:
start cmd /k "dir"
2. 与 timeout 结合
延迟启动程序:
timeout /t 5 && start myprogram.exe
3. 与 tasklist 结合
查看正在运行的程序,并根据需要启动:
tasklist | find "myprogram.exe" || start myprogram.exe
4. 与 for 结合
批量启动多个文件:
for %f in (*.exe) do start "%~nxf" "%f"
5. 与 set 结合
动态设置路径和参数:
set MYAPP="C:\Path\To\MyApp.exe"
start %MYAPP% --arg1 value1
6. 与 powershell 结合
使用 PowerShell 脚本启动:
start powershell -Command "& {Start-Process myprogram.exe}"
7. 与 schtasks 结合
创建定时任务并启动:
schtasks /create /tn "MyTask" /tr "C:\Path\To\myprogram.exe" /sc once /st 09:00
8. 与 runas 结合
以不同用户身份启动程序:
start runas /user:username "myprogram.exe"
这些组合技巧可以帮助你更高效地使用 start 命令,根据具体需求灵活运用。
关于 start 命令的组合使用技巧和示例:
9. 与 echo 结合
在启动程序前显示提示信息:
echo Starting My Program... && start myprogram.exe
10. 启动后台进程并记录输出
将程序输出重定向到文件:
start /B myprogram.exe > output.txt 2>&1
11. 使用批处理文件
在批处理文件中使用 start 启动多个程序:
@echo off
start myprogram1.exe
start myprogram2.exe
12. 结合 call 命令
在一个批处理文件中调用另一个批处理文件:
start call myscript.bat
13. 启动网页并使用特定浏览器
使用指定的浏览器打开网址:
start chrome "https://www.example.com"
14. 启动文件夹
快速打开文件夹:
start "" "C:\Path\To\Folder"
15. 通过 findstr 过滤进程
过滤并启动特定名称的程序:
tasklist | findstr /I "myprogram" && start myprogram.exe
16. 结合 if 语句
条件启动程序:
if exist "myprogram.exe" start myprogram.exe
17. 启动带有参数的 Python 脚本
使用 Python 解释器启动脚本:
start python "C:\Path\To\myscript.py" --option value
18. 使用 exit 结束脚本
在批处理文件中结束脚本并关闭窗口:
start myprogram.exe
exit
19. 启动应用程序并保持窗口打开
让命令窗口保持打开状态以查看输出:
start cmd /k "myprogram.exe"
20. 启动指定文件的默认应用程序
打开指定文件类型的默认应用程序:
start "C:\Path\To\mydocument.docx"
21. 使用变量传递参数
通过变量传递启动参数:
set ARG1=value1
start myprogram.exe %ARG1%
22. 启动 FTP 客户端
如果需要连接到 FTP 服务器,可以使用:
start ftp ftp://username:password@ftp.example.com
23. 启动一个脚本并隐藏窗口
在后台运行脚本,避免显示命令窗口:
start /B cmd /c myscript.bat
24. 启动 Java 应用程序
使用 Java 运行一个 JAR 文件:
start java -jar "C:\Path\To\myapp.jar"
25. 使用 setlocal 和 endlocal
在批处理文件中限制变量的作用域:
@echo off
setlocal
set MYVAR=Hello
start cmd /k "echo %MYVAR%"
endlocal
这些组合技巧能够帮助你在使用 start 命令时更加灵活和高效。

浙公网安备 33010602011771号