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的关系。

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

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

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

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

在Windows11中,命令解释器除开PowerShell和CMD之外,往往还有Azure Cloud Shell和WSL对应各种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

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

CMD和PowerShell的使用细节

对于CMD,它的换行符是^。

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

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

目录
相关文章
|
Web App开发 人工智能 Android开发
iconfont.cn 阿里出品的矢量图标库
Iconfont.cn是阿里巴巴推出的矢量图标库,其中涵盖了1000多个常用图标,并在持续更新中。(目前已有7000+图标,部分图标为用户上传,因此默认不公开,但是可以搜索到。)
16897 0
iconfont.cn 阿里出品的矢量图标库
|
XML JSON API
教你如何使用API接口获取数据!
使用API接口获取数据的过程通常涉及到几个步骤,包括了解API、注册获取API密钥、编写代码调用API并处理返回的数据。下面是一个详细的教程。
|
人工智能 Cloud Native 虚拟化
VMware vSphere 7.0 Update 3v 下载 - 数据中心虚拟化和云原生平台
VMware vSphere 7.0 Update 3v 下载 - 数据中心虚拟化和云原生平台
3707 4
|
NoSQL Redis 数据库
Docker平台上的Redis镜像运行
这就是如何在Docker平台上运行Redis镜像的全部过程。走进Docker和Redis的世界,探索更多可能!
898 10
|
人工智能 自然语言处理 测试技术
指令跟随大比拼!Meta发布多轮多语言基准Multi-IF:覆盖8种语言,超4500种任务
Meta发布的Multi-IF新基准旨在评估大型语言模型(LLMs)在多轮和多语言指令跟随方面的能力。该基准扩展了IFEval,包含4501个多语言对话,每个对话有三个回合,涵盖8种语言。评估结果显示,现有模型在多轮和非拉丁字母语言中的表现较差,揭示了LLMs在这些方面的潜在限制。尽管存在局限性,Multi-IF为更全面、真实的模型评估提供了重要参考,推动LLMs的发展与改进。论文链接:https://arxiv.org/abs/2410.15553
716 29
怎样将Beyond Compare添加到系统右键菜单
怎样将Beyond Compare添加到系统右键菜单
3415 0
|
安全 测试技术 Swift
Llama 3开源,魔搭社区手把手带你推理,部署,微调和评估
Meta发布了 Meta Llama 3系列,是LLama系列开源大型语言模型的下一代。在接下来的几个月,Meta预计将推出新功能、更长的上下文窗口、额外的模型大小和增强的性能,并会分享 Llama 3 研究论文。
Llama 3开源,魔搭社区手把手带你推理,部署,微调和评估
|
算法 前端开发 开发工具
vitepress从0到1,让每个前后端小伙伴都拥有一个属于自己的博客
这篇文章详细介绍了如何从零开始使用VitePress搭建个人博客,包括项目初始化、配置美化及部署全流程。

热门文章

最新文章