cmd

启动命令解释器的新实例,cmd.exe。 如果未使用参数, cmd 则显示作系统的版本和版权信息。

Note

我们鼓励寻求更高级功能的用户探索 PowerShell 以增强脚本编写和自动化。

Syntax

cmd [/c|/k] [/s] [/q] [/d] [/a|/u] [/t:{<b><f> | <f>}] [/e:{on | off}] [/f:{on | off}] [/v:{on | off}] [<string>]

Parameters

Parameter Description
/c 执行由 <string> 命令处理器指定的命令,然后退出命令处理器。
/k 执行由 <string> 命令处理器指定的命令,并使命令处理器保持运行。
/s /c/k,触发特殊的非分析规则,这些规则将第一个和最后一个引号(")条带在周围 <string> ,但使命令的其余部分保持不变。
/q 关闭回声。
/d 禁用自动运行命令的执行。
/a 将命令输出的格式设置为美国国家标准研究所(ANSI)。
/u 将命令输出的格式设置为 Unicode。
/t:{<b><f> | <f>} 设置背景色 (b) 和前景色 (f)。
/e:on 启用命令扩展。
/e:off 禁用命令扩展。
/f:on 启用文件和目录名称完成。
/f:off 禁用文件和目录名称完成。
/v:on 启用延迟的环境变量扩展。
/v:off 禁用延迟的环境变量扩展。
<string> 指定要执行的作。
/? 在命令提示符下显示帮助。

下表列出了可以用作值 <b> 的有效十六进制数字,以及 <f>

Value Color
0 Black
1 Blue
2 Green
3 Aqua
4 Red
5 Purple
6 Yellow
7 White
8 Gray
9 Light blue
a Light green
b Light aqua
c Light red
d Light purple
e Light yellow
f Bright white

Remarks

  • 若要将命令输出重定向到另一个命令的输入,请使用管道 (|) 运算符。 For example:

    <command1> | <command2>
    
  • 仅当上一个命令失败时,双管道 (||) 运算符才用于执行下一个命令。 在给定方案中, command2 仅当失败时才 command1 执行。 For example:

    <command1> || <command2>
    
  • 若要将命令输出重定向到文件,请使用大于尖括号 > 字符。 For example:

    <command1> > <file1.txt>
    
  • 若要将多个命令组合在一起或嵌套在一起,请使用 &。 For example:

    <command1> & <command2>
    
  • 若要对多个命令 <string>使用,请用命令分隔符分隔 &&它们。 For example:

    <command1> && <command2> && <command3>
    

    Note

    使用 &&时,仅当上述命令成功完成时,以下命令 && 才会运行。 Cmd 执行第一个命令,仅在上一个命令成功时继续执行下一个命令。 否则,如果上一个命令失败,则不会执行后续命令。

  • &、管道 |和括号 ( ) 是特殊字符,在将转义字符或引号作为参数传递时,这些字符前面必须带有转义符 ^ 或引号。

  • 如果命令成功完成作,它将返回零(0)或无退出代码的退出代码。

  • 如果提供的目录路径、文件或任何信息包含空格,则必须在文本周围使用双引号(" ""Computer Name"。 For example:

    mkdir Test && mkdir "Test 2" && move "Test 2" Test
    
  • 必须在以下特殊字符周围使用引号: & <> [ ] |{ } ^ = ; ! ' + , ' ~ [空格]。

  • 如果指定 /c/k指定 cmd 进程,则仅当满足以下所有条件时,才会保留余 <string>下和引号:

    • 你也不会使用 /s
    • 只使用一组引号。
    • 您不使用引号中的任何特殊字符,例如: & ( <> ) @ ^ |。
    • 在引号中使用一个或多个空格字符。
    • <string> 引号是可执行文件的名称。

    如果未满足上述条件, <string> 则通过检查第一个字符来验证它是否为左引号来处理。 如果第一个字符是左引号,则会将其与右引号一起剥离。 保留右引号后面的任何文本。

  • 如果未指定 /dcmd 请查找以下注册表子项:

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun\REG_SZ

    • HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun\REG_EXPAND_SZ

    如果存在一个或两个注册表子项,则会在所有其他变量之前执行它们。

  • 可以使用此方法禁用特定进程的 /e:off命令扩展。 可以通过设置以下cmd值来启用或禁用计算机或用户会话上所有命令行选项的扩展:

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions\REG_DWORD

    • HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions\REG_DWORD

    使用 Regedit.exe将注册表中的 REG_DWORD 值设置为 0x1 (已启用)或 0x0 (已禁用)。 用户指定的设置优先于计算机设置,命令行选项优先于注册表设置。

    Caution

    注册表编辑不当可能会严重损坏系统。 在更改注册表之前,应备份计算机上任何有价值的数据。

  • 启用命令扩展时,以下命令将受到影响:

    • assoc
    • call
    • chdircd
    • color
    • delerase
    • endlocal
    • for
    • ftype
    • goto
    • if
    • mkdirmd
    • popd
    • prompt
    • pushd
    • set
    • setlocal
    • shift
    • start (还包括对外部命令进程的更改)
  • 如果启用延迟环境变量扩展,则可以使用感叹号字符 (!) 替换运行时环境变量的值。

  • 默认情况下,不会启用文件和目录名称完成。 可以使用 启用或禁用命令cmd的特定进程的/f:{on | off}文件名完成。

  • 通过设置以下cmd值,可以为计算机上命令的所有进程或用户登录会话启用或禁用文件名和目录名补全:

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar\REG_DWORD

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar\REG_DWORD

    • HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar\REG_DWORD

    • HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar\REG_DWORD

    要设置 REG_DWORD 值,请运行 Regedit.exe 并使用特定函数的控制字符的十六进制值(例如, 0x9TAB,0x08 是 BACKSPACE)。 对空格使用 [0x20] 值,因为它不是有效的控制字符。 用户指定的设置优先于计算机设置,命令行选项优先于注册表设置。

    Caution

    注册表编辑不当可能会严重损坏系统。 在更改注册表之前,应备份计算机上任何有价值的数据。

  • 如果使用 /f:on启用文件和目录名补全,请使用 CTRL+D 进行目录名补全,使用 CTRL+F 进行文件名补全。 组合键 CTRL+DCTRL+F 之间的唯一区别是 CTRL+D 仅匹配目录名称,而 CTRL+F 同时匹配文件名和目录名称。 如果在内置目录命令 cd上使用文件和目录名称完成, mdrd假定目录完成。

  • CTRL+DCTRL+F 处理文件和目录名称的完成。 这些组合键函数将通配符追加到 <string> 不存在时,请生成匹配的路径列表,然后显示第一个匹配路径。 如果没有任何路径匹配,则文件和目录名称完成函数会发出蜂鸣声,并且不会更改显示。

    • 若要在匹配路径列表中移动,请重复按 CTRL+DCTRL+F
    • 若要向后移动列表,请同时按 SHIFT 键和 CTRL+DCTRL+F
    • 若要放弃已保存的匹配路径列表并生成新列表,请编辑 <string> 并按 CTRL+DCTRL+F
    • 如果在 CTRL+DCTRL+F 之间切换,则会放弃已保存的匹配路径列表,并生成新列表。
  • 如果在匹配路径周围放置引号,则文件和目录名称完成正确处理包含空格或特殊字符的文件名。

  • 如果在处理完成的点<string>从 中处理<string>文件和目录名补全,则将丢弃光标右侧路径的任何部分。

使用环境变量

cmd命令行管理程序环境由确定命令行界面和作系统行为的变量定义。 可以使用两种类型的环境变量(系统和本地)来定义 command-shell 环境或整个作系统环境的行为。 系统环境变量定义全局作系统环境的行为。 本地环境变量定义当前实例 cmd的环境行为。

只有具有管理权限的用户才能更改系统变量。 这些变量最常用于登录脚本。 仅当创建它们的用户登录到计算机时,本地环境变量才可用。 在 HKEY_CURRENT_USER 配置单元中设置的局部变量仅对当前用户有效,但定义了全局作系统环境的行为。

以下列表按优先级降序描述各种类型的变量:

  1. 内置系统变量。
  2. HKEY_LOCAL_MACHINE 配置单元中找到的系统变量。
  3. HKEY_CURRENT_USER 蜂巢中找到的局部变量。
  4. Autoexec.bat 文件中设置的所有环境变量和路径。
  5. 登录脚本中设置的所有环境变量和路径(如果存在)。
  6. 在脚本或批处理文件中以交互方式使用的变量。

在命令行界面中,每个实例 cmd 继承其父应用程序的环境。 因此,可以更改新 cmd 环境中的变量,而不会影响父应用程序的环境。

可以通过运行以下命令之一来查看环境中的环境变量:

set
Get-ChildItem Env:

设置环境变量

若要查看变量,请键入:

set <VariableName>

若要添加变量,请键入:

set <VariableName>=<value>

若要删除变量,请键入:

set <VariableName>=

可以将大多数字符用作变量值,包括空格。 如果使用特殊字符 <、 >|、 & 或 ^,则必须在它们前面加上转义字符 ^ 双引号。 如果使用双引号,它们将作为值的一部分包含在内,因为等号后面的所有内容都被视为值。 请考虑以下示例:

若要创建变量值 New&Name,请键入:

set <VariableName>=New^&Name

若要创建变量值 "New&Name",请键入:

set <VariableName>="New&Name"

如果在命令提示符处键入 set <VariableName>=New&Name (不含克拉 ^ 或双引号),可能会显示以下错误消息:

"'Name' is not recognized as an internal or external command, operable program or batch file."

变量名称不区分大小写。 但是, set 在键入变量时显示该变量。 您可以在变量名称中组合大写和小写字母,以使代码更具可读性,例如 UserName

Note

  • 单个环境变量的最大大小为 8,192 字节。
  • 进程的所有环境变量(包括名称、值和等号)的最大总大小为 65,536 个字符。

替换环境变量值

若要替换命令行或脚本中的变量值,请将变量名称括在百分号(%VariableName%) 中。 这允许 cmd 引用变量的值,而不是将其视为文本文本。 运行脚本时, cmd 将变量的实例替换为其值。 例如,在脚本中使用 %USERNAME% 会自动替换实际用户名。 变量替换不是递归的; cmd 仅检查变量一次。