这篇文章主要介绍了用PowerShell代替批处理吧!本文讲解了批处理文件的历史、Windows NT 和 Cmd.exe、Windows Script 主机、进入 Windows PowerShell、为什么是时候停止写批处理了等内容,需要的朋友可以参考下
 

PowerShell应当已经名正言顺地成为批处理(Cmd.exe shell脚本)的替代者了,但是因为一些原因,许多人都不是很情愿抛弃批处理。这篇文章将作为一个系列文章的开始帮助你打破批处理的习惯,向PowerShell进军。

在我进入这些文章系列之前,我想先稍微讲述一下关于批处理文件的一些历史和为什么你需要使用PowerShell来代替老风格的批处理代码编写你的脚本。

批处理文件的历史

批处理文件拥有很悠久的历史了,微机操作系统上的一个CP/M ,拥有可提交的命令,它可以将文本文件中的一系列命令逐行运行。它非常简单(因为当时的内存很吃紧),不支持任何类型的条件分支。

当开发MS-DOS时,微软在它的Command.com命令解释器中,也纳入了非常类似的批处理功能:把命令存在一个文本文件中,命名为.Bat的扩展名,然后命令解释器就会运行它里面的每一个命令。

在以后的DOS版本中,微软通过多种方式扩展了批处理文件。增加了标签,GOTO语句,和If语句来处理分支。很重要的一点,批处理“语言”不是被设计出来的。它只是脱胎于CP/M可提交命令而已。

Windows NT 和 Cmd.exe

很快就到了Windows NT (1993)了,微软纳入了一个控制台模式的应用程序,Cmd.exe,直到这一天它也才呈献给用户的一个传说中的“C: 提示符”。cmd.exe是旧的MS-DOS上的Command.com的一个超集,甚至使用很多相同的命令。命令类似,它的设计向后兼容,以确保用户能 够运行旧的MS-DOS上的批处理文件。Cmd.exe也能运行带有.Bat 扩展名“批处理文件”。

Cmd.exe 和 Command.com之间的相似性是它对.Bat文件的向后兼容性,微软刚开始选择的Cmd.exe图标(“MS-DOS” logo)导致了用户困惑多年。即使在今天我们在一些论坛社区,还会看到一些提问“如何用DOS干什么什么”,事实上这关DOS鸟事。

Cmd.exe比 Command.com拥有更多的功能,相应的也就是批处理文件的扩展。其中就包括 For /f的迭代,简单的使用Call命令来调用子程序,环境的指定(Setlocal and Endlocal)。虽然这些增强,让批处理“语言”更加实用,它仍然还是有许多缺陷,这让写一个简单的批处理程序变成一件令人头疼的事。

Windows Script 主机

从Windows 2000(1999)开始,微软通过引入Windows Script Host 两个真正的,内置的,可编程语言(VBScript和JScript 微软版本低Javascript)来增强它的脚本功能。 WSH脚本依赖于COM对象来在操作系统和应用程序之间进行交互。尽管WSH极其实用和强大,它受限于机器上必须安装所需的COM对象,并且没有提供命令 行界面。

进入 Windows PowerShell

批处理和WSH脚本没有提供一致性,因为它们是两种分开的增强工具,拥有不同的用户接口(批处理和wSH脚本是两码事)。微软意识到了这一点,在 2006年发布了Windows PowerShell的第一个版本,结束了列国混战的局面,一统了Windows脚本的江湖。PowerShell基于.NET 框架,提供了一个命令行,和管理Windows 操作系统的接口。

现在我们拥有了Windows PowerShell,没有任何必要再去编写旧式的的批处理文件(Cmd.exe shell脚本)。展望未来吧,你应当将你的精力放在学习PowerShell上,主要是因为微软已经将PowerShell定位成Windows操作系 统自动化和企业应用程序管理的默认工具了。

为什么是时候停止写批处理了

这里给出你应当停止写批处理文件,而转向PowerShell脚本的五个理由。

1.PowerShell是未来,是标杆。微软已经将PowerShell定位为Windows操作系统和微软企业应用程序管理的默认工具了。许多第三方供应商也提供了PowerShell类库用来管理他们的产品。
2.批处理是晦涩难懂的,它有很多缺陷。我以前经常去一些脚本提问的网站,我都数不清我问过多少次诸如为什么环境变量展开后不正确啦,为什么命令运行后不正确啦。真的没有必要把自己耗在cmd.exe上了。批处理的限制太多了,投入到PowerShell的怀抱中吧!
3.PowerShell是支持批处理和命令行的,转向PowerShell并不是说抛弃了批处理,老式的批处理文件仍然可以在PowerShell上很好地运行,命令行工具也仍然在PowerShell上能够完美兼容运行。
4.PowerShell是真正的脚本编程语言,你可能还没有尝到PowerShell的甜头,尤其当你尝试体验一些复杂逻辑时,在PowerShell中明显比CMD.exe要简单地多。许多时候,一行PowerShell命令行,能够替代成百上千的批处理代码。
5.PowerShell 使用的是对象,不像Cmd.exe和其它基于文本的Shell只能使用文本的命令输出。另一方面PowerShell使用的是.NET 对象,那些昔日在批处理中比较棘手的问题(比如日期时间的解析)在PowerShell中变得出奇的简单。

扔下批处理吧

Cmd.exe短期内不会消亡,但是也没有什么理由值得我们在这老式的批处理语言上煞费苦心,把它扔下来,使用PowerShell来代替它吧!

用PowerShell代替批处理吧!的更多相关文章

  1. PowerShell+NetApi 批处理执行程序

    基于CMD 编写批处理程序很反人类,此篇文章介绍利用Power Shell脚本(借鉴明经net版主雪山飞狐的脚本改造而成)处理之前的Bat+scr的过程(https://www.cnblogs.com ...

  2. cmd批处理命令及powershell

    https://blog.csdn.net/wenzhongxiang/article/details/79256937 Powershell查询IP地址及主机名信息:1.foreach($ipv4  ...

  3. windows的cmd批处理命令及powershell (二)

    1.变量设置 for /l %%i in (1,1,100) do @echo %%i set /a i=500set /a i=%i%+200echo %i%pause ++++++++++++++ ...

  4. 在Bat批处理中调用Powershell脚本

    ##如何在BAT中调用powershell,把下面代码另存为bat格式pushd %~dp0powershell.exe -command ^  "& {set-executionp ...

  5. 【SharePoint学习笔记】第2章 SharePoint Windows PowerShell 指南

    快速了解Windows PowerShell     从SharePoint 2010开始支持PowerShell,仍支持stsadm.exe工具:     可以调用.NET对象.COM对象.exe文 ...

  6. 直接双击运行PowerShell的脚本文件

    原来的不支持有空格的路径,由dugu的批处理中找到方法了,利用windows路径的另外的另外表达方式即可,".\路径" 这个东西用的不多啊,使用这个格式后powershell就能不 ...

  7. PowerShell让系统可以执行.ps1文件

    .ps1文件是PowerShell写好的脚本文件.在Windows系统中,默认情况下是不允许执行.ps1文件的,那么怎么才能让系统允许执行.ps1文件呢? 什么是“.ps1”文件? 这个是PowerS ...

  8. DOS批处理命令-CMD命令

    CMD命令是重新开始一个命令解析器的实例.当然,他的功能并不止这么简单. Windows コマンド インタープリターの新しいインスタンスを開始します. 语法结构 CMD [/A | /U] [/Q] ...

  9. 作为平台的Windows PowerShell(一)

    除了作为一种脚本语言外,Windows PowerShell被多种应用程序使用.这是因为Windows PowerShell引擎可以被托管在一个应用程序内部.这篇博文和下一篇博文将会处理在C#应用程序 ...

随机推荐

  1. 深入struts2(三)---工作机制和运行流程图

    1     工作原理 1.1     体系架构 图2.1 struts2.0体系架构图 1.2     工作机制 针对上节体系架构图,以下分步说明运行流程 Ø  client初始化一个指向Servle ...

  2. MVC生成CheckBoxList并对其验证

    原文:MVC生成CheckBoxList并对其验证 通过扩展方法,可以让CheckBox水平排列,生成CheckBoxList,正如"MVC扩展生成CheckBoxList并水平排列&quo ...

  3. ftk学习记录(IME文章)

    [声明:版权全部,欢迎转载.请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前面说的是全屏设置,还是请大家看一下效果图. watermark/2/text/aHR0cDovL ...

  4. 如何为你的初创应用App开发公司建立战略计划(商业战略竞争五力学)

    首先,什么是战略计划?战略计划可以定义为一个为了达到目标而需要执行的一系列动作步骤的计划. 根据当今全球第一战略权威,商业管理界公认的"竞争战略之父"Michael Porter著 ...

  5. 新服务器部署sqlserver之前的准备

    当你有一个新的服务器需要部署的时候,如果没有部署过的经验很可能会走很多误区,并且给以后的维护工作加大难度,我在这就把我部署服务器的一些经验跟大家分享一下. 1.登陆服务器以后先将物理盘按照64k为分配 ...

  6. IOS开发中怎样验证邮箱的合法性

    IOS开发中怎样验证邮箱的合法性 文章参考:http://www.codes51.com/article/detail_94157.html 代码: - (void)viewDidLoad { [su ...

  7. MySQL的C语言编程(一)

    原文:MySQL的C语言编程(一) 初学MySQL,记录一下MySQL用c语言编程时遇到的问题. 这是我的源程序: int main(void) { MYSQL *mysql=NULL; if((my ...

  8. Asp.net TextBox只能输入数字

    原文:Asp.net TextBox只能输入数字 <asp:textbox id="TextBox1" onkeyup="if(isNaN(value))execC ...

  9. 实例学习SSIS(四)--使用日志记录和错误流重定向

    原文:实例学习SSIS(四)--使用日志记录和错误流重定向 导读: 实例学习SSIS(一)--制作一个简单的ETL包 实例学习SSIS(二)--使用迭代 实例学习SSIS(三)--使用包配置 实例学习 ...

  10. android 布局属性大全---初学者必备

    Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料,花费本人一个下午搞出来的,希望对其他人有用. 第一类:属性值为true或false android: ...