1 CMD 与 PowerShell 常用指令
在命令行环境中高效运行程序,掌握终端的基本操作命令至关重要。无论是 Windows 系统下的 CMD(命令提示符)还是 PowerShell,它们都配备了一系列实用的命令,助力我们管理文件、执行程序以及进行系统配置。以下是对 CMD 和 PowerShell 中常用终端指令的详细解析。
功能描述 | CMD 命令 | PowerShell 命令 | 备注 |
---|---|---|---|
清屏 | cls | Clear-Host 或 clear 或 cls | 在 CMD 中,直接使用 cls 即可清屏; 在 PowerShell 中三者均可,但 Clear-Host 更符合 PowerShell 风格。 |
Tab 补全 | 自动补全(按 Tab 键) | 自动补全(按 Tab 键) | 在输入命令、路径或文件名时,按 Tab 键可自动补全或显示可能的选项; 若存在多个匹配项,多次按下 Tab 键可循环显示这些选项,便于选择。 |
切换路径 | cd [路径] | Set-Location [路径] 或 cd [路径] | cd 在两者中均可使用,但 PowerShell 的 Set-Location 提供了更多功能。 |
查看当前路径 | cd(无参数) | Get-Location 或 pwd | cd 在 CMD 中无参数时显示当前路径; PowerShell 中 pwd 是 Print Working Directory 的缩写。 |
列出目录内容 | dir | Get-ChildItem 或 ls | dir 在 CMD 中列出目录内容; PowerShell 中 ls 是 List 的缩写,更简洁。 |
创建目录 | mkdir [目录名] | New-Item -ItemType Directory -Name [目录名] 或 mkdir [目录名] | mkdir 在两者中均可使用,但 PowerShell 的 New-Item 提供了更灵活的选项。 |
删除文件 | del [文件名] | Remove-Item [文件名] | del 在 CMD 中删除文件; PowerShell 中 Remove-Item 更通用,也可删除目录。 |
删除目录 | rmdir [目录名] | Remove-Item [目录名] -Recurse | rmdir 在 CMD 中删除空目录; PowerShell 中需加 -Recurse 参数删除非空目录。 |
查看命令帮助 | help [命令名] | Get-Help [命令名] | help 在 CMD 中提供基本帮助; PowerShell 的 Get-Help 提供了更详细的帮助信息。 |
执行程序 | 直接输入程序名或路径 | 需注意路径问题 | 在 CMD 中,若程序位于当前目录,可直接输入程序名运行; 在 PowerShell 中,若当前路径未加入 PATH 环境变量,需使用 “.\程序名” 的形式运行当前目录下的程序。 |
退出程序/终端 | exit 或 Ctrl + C(中断) | exit 或 Ctrl + C(中断) | 在 CMD 和 PowerShell 中: exit 命令用于正常退出终端; Ctrl + C 用于中断当前正在执行的命令或程序。 |
执行程序时的路径问题:
- 在 CMD 中:如果程序位于当前目录,你可以直接输入程序名来运行它,即使当前目录没有加入 PATH 环境变量。
- 在 PowerShell 中:出于安全考虑,如果当前目录没有加入 PATH 环境变量,你需要使用 .\ 程序名 的形式来运行当前目录下的程序。这里的 .\ 表示当前目录。
2 在终端中执行 C 程序
在终端中运行 C 程序是开发者常见的需求,不同的终端环境(如 CMD、PowerShell 或 VS Code 内置终端)提供了各自的操作方式。接下来,我将详细讲解如何在这些终端中编译并运行 C 程序,包括具体的命令示例和注意事项,帮助你快速上手。
2.1 定位 C 程序文件路径
首先,我们需要确定当前源文件的存储位置。如果你是在 VS Code 中编辑源代码,可以通过以下简单步骤快速定位源文件所在的磁盘位置,以便后续在终端中进行编译和运行操作。
具体操作如下:在 VS Code 的文件列表中,将鼠标悬停在目标源文件(例如 main.c)上,然后右键单击该文件。在弹出的右键菜单中,选择 “在文件资源管理器中显示” 选项。
这样,文件资源管理器将会打开,并直接定位到该文件所在的目录位置。
若直接在文件资源管理器中双击 main.exe 文件,命令行窗口会在程序执行完毕后立即关闭,导致输出结果一闪而过,用户无法查看。这是因为窗口与程序的生命周期绑定,程序结束时窗口自动退出。
为避免此问题,我们建议在终端中(如 CMD 或 PowerShell)运行程序。在终端中执行程序时,窗口会保持打开状态,直到用户手动关闭,从而可以完整地查看程序的输出和调试信息。
2.2 在 PowerShell 中运行 C 程序
我们可以在包含 main.exe 文件的文件夹空白处右击鼠标,从弹出的菜单中选择 “在终端中打开” 选项,操作如下:
请注意,当前使用的终端是 PowerShell。在 PowerShell 中,可通过 ls 命令查看目录内容。
需要特别注意的是,在 PowerShell 中运行程序或执行指令时,必须指定文件的相对路径,其中 .\ 代表当前目录。为提升操作效率,在输入文件名(如 main.exe)后,可按下 Tab 键自动补全前面的相对路径(即 .\)。具体操作示例如下图所示:
2.3 在 CMD 中运行 C 程序
除了使用 PowerShell,你还可以在命令提示符(CMD)中运行程序。以下是具体步骤:
1. 打开命令提示符:按下 Win + R 键,输入 cmd,然后点击 “确定”。
2. 切换到程序所在的磁盘:如果程序位于 D 盘,输入 d: 并按 Enter 键。
3. 进入程序所在的文件夹:例如,程序位于 D:\Code_Space\C_Language\Chapter1_HelloWorld,输入 cd D:\Code_Space\C_Language\Chapter1_HelloWorld
并按 Enter 键。
4. 查看目录内容(可选):输入 dir 命令并按 Enter 键,查看当前目录下的文件和文件夹。
5. 运行程序:输入 main.exe 并按 Enter 键,程序将开始执行。
你也可以使用文件的绝对路径来直接运行程序。具体操作是:在命令提示符中输入文件的绝对路径,格式为:盘符:\路径\文件名.后缀名。为方便操作,你可以在文件资源管理器中右键点击目标文件,选择 “复制文件地址” 或直接复制文件目录上方的完整路径,然后将其粘贴到命令提示符中执行。
2.4 添加 "在此打开 CMD" 右键菜单
在通过 CMD 方式运行程序时,频繁切换盘符和路径可能会带来不便。为简化操作,你可以通过修改注册表,在文件夹的右键菜单中添加 “在此打开 CMD” 选项。以下是具体步骤:
1. 打开注册表编辑器:按下 Win + R 键,打开 “运行” 窗口。输入 regedit,点击 “确定” 按钮,进入注册表编辑器。
2. 定位到目标路径:在注册表编辑器的地址栏中,输入路径:计算机\HKEY_CLASSES_ROOT\Directory\Background\shell,然后按 Enter 键。
3. 新建 “在此打开 CMD” 选项:在 shell 项下,右键选择 “新建” > “项”。将新建的项命名为 open_cmd。
双击 open_cmd 项的默认值,输入“在此打开 cmd”,作为该选项的显示名称。
4. 获取 CMD 的路径:按下 Win 键,输入“cmd” 并搜索,然后选择 “打开文件位置”。
右键命令提示符选择 “打开文件所在的位置”。
然后得到 cmd.exe 的路径为:C:\Windows\system32\cmd.exe 。
5. 设置图标(可选):在 open_cmd 项下,右键点击空白处,选择 “新建” > “字符串值”。
将新建的字符串值命名为 Icon。双击 Icon 字符串值,输入 cmd.exe 的路径(如 C:\Windows\system32\cmd.exe),为选项设置图标。
6. 配置命令执行路径:在 open_cmd 项下,右键选择 “新建” > “项”。将新建的项命名为 command。
双击 command 项的默认值,输入 cmd.exe 的路径,如 C:\Windows\system32\cmd.exe。
7. 测试右键菜单选项:在任意文件夹的空白处,右键点击鼠标。在弹出的右键菜单中,选择 “在此打开 cmd” 选项。
此时,CMD 窗口将在当前文件夹中打开,你可以直接输入可执行文件的名称来运行程序,无需再手动切换盘符和路径。
2.5 在 VS Code 终端中运行 C 程序
除了利用系统自带的终端(如 PowerShell 或 CMD)运行程序外,你还可以直接在 VS Code 的内置终端中执行程序。以下是具体操作步骤:
- 打开 VS Code 并加载项目:
- 启动 VS Code,并打开包含你源文件的文件夹或工作区。
- 打开内置终端:
- 在 VS Code 中,你可以通过多种方式打开终端:
- 使用快捷键 Ctrl+`(反引号,通常位于键盘左上角,与 ~ 键共享)。
- 点击菜单栏中的 “终端” > “新建终端”。
- 使用命令面板(Ctrl+Shift+P),输入 “终端: 创建新终端” 并选择。
- 在 VS Code 中,你可以通过多种方式打开终端:
- 导航到程序所在目录(如果需要):
- 默认情况下,终端会打开在当前工作区的根目录。
- 如果你的程序位于子目录中,可以使用 cd 命令切换到相应目录。例如:cd path/to/your/program
- 编译程序(如果需要):
- 如果你的程序需要编译(如 C/C++ 程序),请在终端中使用相应的编译器命令。例如:gcc main.c -o main.exe。
- 运行程序:
在 PowerShell 中,若当前路径未加入 PATH 环境变量,需使用 “.\程序名” 的形式运行当前目录下的程序。其中 .\ 代表当前目录。为提升操作效率,在输入文件名(如 main.exe)后,可按下 Tab 键自动补全前面的相对路径(即 .\),如下所示:
在 CMD 中,若程序位于当前目录,可直接输入程序名运行,如下所示:
3 字符编码切换与中文乱码解决方案
3.1 编码切换的必要性
在计算机系统中,编码(Encoding)是指将字符(如字母、数字、符号等)转换为计算机能够理解和存储的二进制数据的过程。不同的编码方式支持不同的字符集,并且可能以不同的方式表示相同的字符。当我们在命令行或脚本中处理文本数据时,如果编码方式不匹配,就可能导致乱码问题。
在编程和计算机系统中,乱码问题通常是由于字符编码不匹配引起的。当你编写一个包含非 ASCII 字符(如中文)的程序,并在控制台或终端中运行时,如果控制台的字符编码不支持这些字符,就会出现乱码。
以下面这个程序为例:
#include <stdio.h>
int main()
{
// printf("Hello,World");
printf("你好,世界!");
return 0;
}
这个程序输出了一句中文:“你好,世界!”。如果你在一个不支持 UTF-8 编码的控制台中运行这个程序,比如默认使用 GBK 或其他非 UTF-8 编码的 Windows CMD,那么输出的中文可能会显示为乱码。
若使用 VS Code 的自动编译和运行功能,程序运行结果将不会出现乱码现象。
然而,若直接在终端环境中(PowerShell 或 CMD)运行程序,输出内容可能会出现乱码,具体示例如下:
3.2 中文乱码问题解决方案
3.2.1 PowerShell 编码设置
如果你发现 PowerShell 控制台输出乱码,可能是因为控制台默认的编码(通常是 UTF-16)与外部程序或文件的编码不匹配。你可以尝试将控制台的输出编码设置为 UTF-8:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
[Console]:这是一个 .NET 类型,代表控制台。在 PowerShell 中,它用于访问和控制与控制台相关的属性和方法。
OutputEncoding:这是 [Console] 类型的一个属性,表示控制台输出的文本编码。默认情况下,PowerShell 控制台的输出编码可能不是 UTF-8,这可能导致在输出包含非 ASCII 字符的文本时出现乱码。
[System.Text.Encoding]::UTF8:这是一个 .NET 枚举值,代表 UTF-8 编码。UTF-8 是一种广泛使用的字符编码,能够表示 Unicode 标准中的任何字符,并且与 ASCII 编码兼容(即 ASCII 字符在 UTF-8 中使用相同的字节表示)。
通过执行这段指令,将 PowerShell 控制台的输出编码设置为 UTF-8。这样,当程序或脚本输出包含非 ASCII 字符的文本时(如中文字符、特殊符号等),这些字符就能以正确的形式显示在控制台上,而不会出现乱码。
3.2.2 CMD 编码设置
在 CMD(命令提示符)中,如果你遇到输出乱码的问题,通常是因为控制台的代码页设置不正确。默认情况下,CMD 使用的代码页可能不支持某些字符集,特别是当你需要处理非 ASCII 字符(如中文、日文或其他国际字符)时。这时就会使用到 chcp 65001 命令。
chcp 65001
- chcp:这是 CMD 中的一个命令,用于更改控制台的代码页。代码页(Code Page)是一个字符映射表,它定义了字符与字节序列之间的对应关系。不同的代码页支持不同的字符集。
- 65001:这是 UTF-8 的代码页编号。通过执行 chcp 65001,你可以将 CMD 控制台的代码页设置为 UTF-8,从而支持更广泛的字符集,包括中文、日文、韩文等。
3.3 UTF-8 编码基础概述
UTF-8(Unicode Transformation Format - 8-bit)是一种针对 Unicode 的可变长度字符编码,它能够用来表示 Unicode 标准中的任何字符,并且与 ASCII 编码向后兼容。UTF-8 使用 1 到 4 个字节来编码一个字符,具体使用多少字节取决于字符的 Unicode 码点:
- ASCII 字符(U+0000 到 U+007F):使用 1 个字节编码,与 ASCII 编码完全相同。
- 常用字符(如拉丁字母、希腊字母、西里尔字母等,大部分在 U+0080 到 U+07FF 范围内):使用 2 个字节编码。
- 其他字符(如中文、日文、韩文等大部分在 U+0800 到 U+FFFF 范围内):使用 3 个字节编码。
- 特殊字符和补充字符(U+10000 到 U+10FFFF):使用 4 个字节编码。
3.4 采用 UTF-8 编码的优势
广泛支持:UTF-8 是一种国际标准的字符编码,被广泛应用于互联网、操作系统、编程语言和各种软件中。
兼容性:UTF-8 与 ASCII 编码向后兼容,这意味着所有 ASCII 字符在 UTF-8 中都有相同的编码。这使得 UTF-8 在处理英文文本时与 ASCII 一样高效。
多语言支持:UTF-8 能够表示 Unicode 标准中的任何字符,包括中文、日文、韩文、阿拉伯文、希伯来文等各种语言的字符。
避免乱码:通过将控制台的字符编码设置为 UTF-8,你可以确保程序输出的非 ASCII 字符能够正确显示,避免出现乱码。