Windows下命令行使用说明

简介: 本文介绍了从Mac切换到Windows系统后,在使用命令行时遇到的换行符混乱、命令报错等问题,根源在于Windows Terminal可能随机加载PowerShell或CMD。文章梳理了CMD、PowerShell与Windows Terminal之间的关系,解释了为何相同界面下命令行为不一致,并给出CMD与PowerShell在换行符等使用上的区别,提醒用户注意环境差异,避免误操作。

换了一家公司,新公司的网络环境只支持Windows,于是从Mac切换到了Windows。由此遇到了很多很多的问题,在此记录一些比较典型的问题。

使用Windows时,偶尔会遇到需要使用命令行的场景,常常会遇到以下问题:

  • 如果一行命令太长需要换行,常常弄不清楚究竟应该怎么换行。有时应该使用'|',有时应该使用'`',有时又需要使用'^'。关键是,这一次使用了一种换行符,下次写其他命令时再使用就会报错
  • 从网上拷贝下来的命令一运行就报错
  • 承接上一点,更过分的是,以往自己记录下来的命令再运行有时也会报错

以上的问题,很有可能是下面这个问题导致的:

Windows Terminal可能随机加载Power Shell或者CMD

缘起

在Windows出现之前,微软旗下的操作系统是1981年发布的MS-DOS,这时的操作系统都是纯命令行的。

后来,随着Windows 3.1 和 Windows 95的推进,图形界面成了主流。但是这时就出现了一个问题,以前DOS时代的那些软件怎么办?于是微软开发了一个软件,Command Prompt命令提示符,它的简写就是CMD,旨在图形界面中提供一个DOS的仿真环境,以供以前DOS时代的软件使用。

随着时代的发展,CMD越来越不讨喜了。比如CMD只能处理文本,这意味着用户需要手动解析命令输出的文本内容,这既麻烦又容易出错。在这个背景下,微软于2002年开始了一个名为 “Monad” 的项目。这个项目的初衷是为系统管理员提供一个更强大的自动化工具,以应对日益复杂的 Windows 服务器环境。而Monad 项目的核心理念是:命令行应该处理对象,而不是纯文本。

经过几年的开发,Monad 项目在 2006 年正式发布,并更名为 PowerShell 1.0。它作为 Windows XP、Windows Server 2003 和 Windows Vista 的一个可选组件推出。

随着时间的流逝,Windows上的命令行又面临了新的问题。长期以来,Windows 上的命令行工具,比如命令提示符(CMD)和 PowerShell,都运行在一个古老、功能有限的控制台窗口里。这个窗口不支持标签页、主题、分屏等现代终端应有的功能,这让开发者和系统管理员的工作效率大打折扣。

在2019 年 5 月,在微软的 Build 开发者大会上,微软宣布了 Windows 终端(Windows Terminal)项目,该项目在2020年发布了1.0版本,并于Windows11中变成了系统默认命令行宿主应用程序

Windows下命令行使用-Windows终端图标.png

关系解读

我们开篇提到的那些问题就出在这个Windows11的系统默认命令行宿主应用程序上。

首先我们要理解CMD、PowerShell、Windows Terminal的关系。

CMDPowerShell命令行解释器或者说是命令处理器,它们是执行命令的核心逻辑层,负责实际处理指令。

Windows Terminal 是一个命令行宿主应用程序,它为这些解释器提供了一个用户界面,即一个UI层。

它们的关系可以用下图表示:

![[Windows下命令行使用-三者关系.png]]

在Windows11中,命令解释器除开PowerShellCMD之外,往往还有Azure Cloud ShellWSL对应各种Linux环境。而这些环境默认的UI都是Windows Terminal

理解了这些环境的关系,我们再回到最初的问题。

Windows Terminal可能随机加载Power Shell或者CMD

问题

在Windows11之前,不同的命令解释器会有自己不同的UI界面,用户通过使用不同的入口程序打开不同的命令解释器,而且可以通过界面的不同轻易的判断当前使用的是哪个环境,不会搞混。

Windows下命令行使用-PowerShell图标.png

Windows下命令行使用-CMD图标.png

但是在Windows11中,Windows Terminal成为了系统默认命令行宿主应用程序,即所有的命令解释器默认都会通过它打开

虽然设置了Windows Terminal的默认环境是Power Shell,但是它仍然有概率使用CMD,而两者之间的区分并不明显。这就是为什么会有开篇提到的那些问题:Windows Terminal的底层环境不同了,当然能够使用的命令、对应的换行符都不相同。

打开Window Terminal,加载了Power Shell环境:

Windows下命令行使用-终端打开PowerShell.png

打开Window Terminal,加载了CMD环境:

Windows下命令行使用-终端打开CMD.png

在使用终端时一定要注意两者的区别!

CMDPowerShell的使用细节

对于CMD,它的换行符是^

对于PowerShell,它的换行符是`(反引号)。

其实这两个符号就是它们分别的转义符,它们之所以能实现换行的效果,是因为命令解释器在执行命令时,会取行首到换行符(比如\n)为一行命令。而在换行符前面添加了转义字符,那么命令解释器会将这个换行符识别为命令中的一个文字,从而继续解析文本,直到下一个换行符。但是对于UI层,仍然会识别出这个转义后的换行符,从而实现UI层面的命令换行。

目录
相关文章
|
2月前
|
负载均衡 网络协议 Linux
网络ping不通到底有多少原因?一文搞明白!
网络ping不通是网络中出现频率最高的故障之一,同时也是最让人抓狂的故障,谁没遇到过?今天就和你细说下ping不通的原因,看看能不能和你遇到的情况对上号。
497 0
|
2月前
|
缓存 NoSQL 前端开发
如何开发工程项目部管理系统中的物资管理板块(附架构图+流程图+代码参考)
工程项目部物资管理需构建“申请→审批→采购→入库→领用→盘点→预警”闭环流程,实现库存可视、差异可控、现场高效。本文详解落地思路、架构设计、关键表结构、业务流程及开发技巧,并提供核心代码示例与FAQ,助力企业实现数据驱动的物资管理体系。
|
2月前
|
缓存 IDE 开发工具
重装系统的成本有多高?不仅是时间,还有这些隐藏代价
重装系统看似简单,实则隐藏诸多成本。除了耗费大量时间进行安装、备份和配置,还可能因数据丢失、软件授权问题、硬件兼容风险等带来额外损失。本文详解重装系统的六大成本:时间、数据、授权、配置、风险及潜在支出,并提供实用建议,助你避免“重装陷阱”。
|
4月前
|
机器学习/深度学习 存储 Prometheus
机器学习模型监控警报系统设计:Prometheus+Evidently 实战教程
本系统采用Prometheus与Evidently双引擎架构,实现从数据采集、智能分析到精准告警的全流程监控。通过时序数据与模型分析深度集成,支持数据漂移检测、性能评估及根因分析,结合Grafana可视化与Alertmanager智能路由,构建高可用、低延迟的监控体系,显著提升异常检测能力与系统稳定性。
171 1
|
11月前
|
API
诸葛神签免费API接口教程
该接口用于随机获取一支诸葛神签,共100签。通过POST或GET请求至https://cn.apihz.cn/api/mingli/zhuge.php,需提供用户ID和KEY。返回结果包括状态码、消息内容、签文图片、序号、吉凶及解签。示例中ID与KEY为公共使用,建议使用个人ID与KEY以提高调用频率。
|
SQL 前端开发 Java
编译JSqlParser4.6-4.7最新源代码
编译JSqlParser4.6-4.7最新源代码
319 0
|
Shell 数据处理 开发者
|
XML Java Maven
创建第一个springboot项目、用springboot实现页面跳转、@Controller和@RestController的区别
这篇文章介绍了如何创建第一个Spring Boot项目,实现页面跳转,以及`@Controller`和`@RestController`的区别,并提供了代码示例和配置说明。
创建第一个springboot项目、用springboot实现页面跳转、@Controller和@RestController的区别