【转】PowerShell入门(五):Cmd命令与PowerShell命令的交互
转至:http://www.cnblogs.com/ceachy/archive/2013/02/18/Call_Between_Cmd_And_PowerShell.html
单独使用一种脚本来完成一项任务是理想的状态,而现实的情况往往是,因为历史原因、或者团队组成,你不得不将多种脚本或者程序组合在一起,来完成某项任务。本文的讨论范围是Cmd命令与PowerShell命令之间的组合与调用。
毋庸置疑,Cmd命令与PowerShell命令之间的调用有两个方向。即在Cmd命令中调用PowerShell的命令,以及在PowerShell脚本中调用Cmd命令。需要说明的是,这里的调用分两个层次:一、简单的在其中一个的环境中执行另外一个命令,完成部分工作;二、在其中一个的执行上下文中调用另一个的命令,并根据返回结果来选择后面的逻辑。
在Cmd命令中调用PowerShell命令
如果只是在Cmd命令中调用PowerShell的命令,而不需要记录PowerShell的返回结果,是非常简单的。可以直接在Cmd命令或者脚本中执行类似一下命令:
powershell echo "Hello" |
执行上述命令的时候,Cmd是把PowerShell当成一个应用程序来执行的。
在Cmd命令中调用PowerShell的命令并获得返回值的可行方法并不多。这是因为,Cmd命令对于结果的处理往往需要借助于文件读写,很少有机会在各个命令之间传递数据,并保存中间结果的。For命令是其中最好的一个方法,它的指向方法如下:
for /f %i in ('powershell echo "Hello"') do (set a=%i) |
以上命令的执行结果是%a%被赋值为Hello。当然,如果只是简单赋值,就没有必要这样大费周折。调用PowerShell的命令,肯定是看中了它强大的编程能力,比如自定义的排序等等。
我遇到的一个实际的例子是这样的:文件服务器上有一个目录,里边放着一些按年月命名的目录。因为这个目录结构已经确定下来了,而且很多组都在使用,不能随便改动。我们有一个任务就是每天定时去最新的年月目录里拷贝build。麻烦的是,第一、文件夹时按照12.1、12.2。。。12.10、12.11、12.12、13.1。。。这样命名的;第二、从时间上没法找,因为最新的目录不是在月底,而是在月中的某一天生成的。以Cmd命令有限的编程能力,肯定是不好解决这个问题的。我最终写了一个PowerShell的脚本文件,在Cmd的脚本中调用,终于解决了这个问题。
在PowerShell命令中调用Cmd命令
由于PowerShell强大的管道功能,在PowerShell命令或者脚本中调用Cmd命令并获得返回结果是件很容易的事情,是否获得结果对于调用Cmd命令的方式也没有影响。请看如下示例:
cmd /c dir$a = (cmd /c dir)$a |
以上示例中,第1行的执行结果,和后两行的执行结果是一样的。不同点是,后者的执行结果被保存了下来,前者只是将结果打印在屏幕上。
为什么需要在PowerShell中调用Cmd命令呢(既然PowerShell有如此强大的Shell以及编程特性)?其实原因也很简单。在PowerShell之前我们有很多很好用的Cmd命令、工具和控制台程序,如果完全丢弃他们并使用PowerShell重写的话,那绝对是浪费。要知道,能够利用最小的改变来高效地完成任务,才是我们的目标。
结语
一个新的语言,如果不能与已有的资源兼容和沟通,那么它注定不能成为大众的选择(也许可能在小众中流行),最终将被遗弃和忘记。PowerShell与现有系统良好沟通性有目共睹,从它与Cmd命令的关系可见一斑。
【转】PowerShell入门(五):Cmd命令与PowerShell命令的交互的更多相关文章
- 【转】PowerShell入门(二):PowerShell是Cmd命令行的加强版吗?
转至:http://www.cnblogs.com/ceachy/archive/2013/01/31/PowerShell_vs_Cmd.html PowerShell是命令行的加强版吗?Power ...
- 【转】PowerShell入门(一):PowerShell能干什么?
转至:http://www.cnblogs.com/ceachy/archive/2013/01/30/WhatCanPowerShellDo.html PowerShell能干什么呢?就像序言中提到 ...
- PowerShell入门(一):PowerShell能干什么?
原文链接:http://www.cnblogs.com/ceachy/archive/2013/01/30/WhatCanPowerShellDo.html PowerShell能干什么呢?就像序言中 ...
- 【转】PowerShell入门(七):管道——在命令行上编程
转至:http://www.cnblogs.com/ceachy/archive/2013/02/22/PowerShell_Pipeline.html 管道对于Shell来说是个化腐朽为神奇的东西, ...
- 在CMD命令行和PowerShell中实现复制粘贴功能
在CMD命令行和PowerShell中实现复制粘贴功能 常常使用命令行或者PowerShell的朋友肯定会遇到这样的情况:粘贴文本非常easy,右键--选择粘贴就可以,可是想要复制命令 ...
- powershell 中常用cmd,unix命令(get-alias)
powershell 中常用cmd,unix命令(get-alias) Get-Content Alias cat -> Get-Content Alias gc -> Get-Conte ...
- cmd/powershell常用命令 git常用命令
cmd/powershell: 1. 新建文件夹: mkdir directoryName 2. 新建文件: cmd: type nul>fileName (空文件) powershell: n ...
- cmd命令调用powershell脚本方法
cmd方法: powershell -command ". ('ps1脚本路径'); WriteInfo -param 'param参数值'" ps1脚本代码: function ...
- powershell入门教程-v0.3版
powershell入门教程-v0.3版 来源 https://www.itsvse.com/thread-3650-1-1.html 参考 http://www.cnblogs.com/piapia ...
随机推荐
- 油田 Oil Deposits
油田 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/L 题意: 输入一个m行n列的字符矩形,统计字符 ...
- PS中常用快捷键
Prtsc:印屏幕 Tab:隐藏工具栏 F:图片在编辑区的显示模式 F8:显示选中框区域的信息 Ctrl+N:新建画布 Ctrl+'+':放大 Ctrl+'-':缩小 工具栏三角形+鼠标:拖拽(只移动 ...
- 可能碰到的iOS笔试面试题(4)--C语言
可能碰到的iOS笔试面试题(4)--C语言 可能碰到的iOS笔试面试题(4)--C语言 C语言,开发的基础功底,iOS很多高级应用都要和C语言打交道,所以,C语言在iOS开发中的重要性,你懂的.里面的 ...
- OpenCV 3.1 StereoBM 获取正确视差Dispariy
OpenCV更新到3.0版本后,Stereo模块变化的挺多的,首先去掉了StereoBMState和StereoSGBMState这两个专门控制BM和SGBM算法参数的类,而且StereoBM不能直接 ...
- Hibernate调用存储过程和函数
操作大批量数据或复杂逻辑,考虑到执行效率和代码量的时候,存储过程和函数在数据库中是预编译好的,调用执行效率高 // 调用过程 {call 过程名称(?,?,?)} public static void ...
- Linux下安装配置Apache+PHP+MariaDB
一.安装apache 1.下载并安装apache yum install httpd 2.启动apache systemctl start httpd.service 3.停止apache syste ...
- 利用HTML5的一个重要特性 —— DeviceOrientation来实现手机网站上的摇一摇功能
介绍之前做两个声明: 以下代码可以直接运行,当然你别忘了引用jQuery才行. <script> // DeviceOrientation将底层的方向传感器和运动传感器进行了高级封装, ...
- spring security 匿名登录
匿名登录,即用户尚未登录系统,系统会为所有未登录的用户分配一个匿名用户,这个用户也拥有自己的权限,不过他是不能访问任何被保护资源的. 设置一个匿名用户的好处是,我们在进行权限判断时,可以保证Secur ...
- 满足要求的最长上升子序列(nlogn)
题意:数列A1,A2,...,AN,修改最少的数字,使得数列严格单调递增.(1<=N<=10^5; 1<=Ai<=10^9 ) 思路:首先要明白的一点是数列是严格单调递增,那么 ...
- Canvas 唯美雨落代码实现
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...