神曲的存在并不是为了享受音乐,而是品味那段最珍贵的回忆。 收藏本站
登陆 / 注册 搜索

阅读: 8.2K   回复: 2

[# 系统基础] PowerShell入门(五):Cmd命令与PowerShell命令的交互(转)

soarcloud 「龙战于野」 2016-7-29 15:16 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

单独使用一种脚本来完成一项任务是理想的状态,而现实的情况往往是,因为历史原因、或者团队组成,你不得不将多种脚本或者程序组合在一起,来完成某项任务。本文的讨论范围是Cmd命令与PowerShell命令之间的组合与调用。
: m0 I- M, Y* t! j  A9 c4 a! n  r& @. d5 @9 |1 Y: s
  毋庸置疑,Cmd命令与PowerShell命令之间的调用有两个方向。即在Cmd命令中调用PowerShell的命令,以及在PowerShell脚本中调用Cmd命令。需要说明的是,这里的调用分两个层次:一、简单的在其中一个的环境中执行另外一个命令,完成部分工作;二、在其中一个的执行上下文中调用另一个的命令,并根据返回结果来选择后面的逻辑。
- P9 y" N* k2 n3 M3 G
) b" w, g& h) M3 Y在Cmd命令中调用PowerShell命令
* e2 ^6 R  r& G! V: |  |$ j  如果只是在Cmd命令中调用PowerShell的命令,而不需要记录PowerShell的返回结果,是非常简单的。可以直接在Cmd命令或者脚本中执行类似一下命令:
+ I# A' n8 ?5 j! v% Z1 @
  I6 N6 J2 Y5 Z3 O8 cpowershell echo "Hello"5 b" \% L! B7 ^* a5 Q4 J7 }9 P
执行上述命令的时候,Cmd是把PowerShell当成一个应用程序来执行的。      
! G0 {+ b4 u& F: X  e% \+ d- W' |
( l4 N- I4 w; h9 i( d) r" B5 G  在Cmd命令中调用PowerShell的命令并获得返回值的可行方法并不多。这是因为,Cmd命令对于结果的处理往往需要借助于文件读写,很少有机会在各个命令之间传递数据,并保存中间结果的。For命令是其中最好的一个方法,它的指向方法如下:* e' P: |* F# A* F: U! @- L2 ?/ [
0 {% R4 R$ J* N4 I% Z3 j% k+ X
for /f  %i in ('powershell echo "Hello"') do (set a=%i)
. {% H2 V& r6 Z) r3 |以上命令的执行结果是%a%被赋值为Hello。当然,如果只是简单赋值,就没有必要这样大费周折。调用PowerShell的命令,肯定是看中了它强大的编程能力,比如自定义的排序等等。
; f/ C3 C) N- w4 t6 Q5 G: g
0 w& N+ d5 ?" ?8 N0 ~  s) m3 T- j  我遇到的一个实际的例子是这样的:文件服务器上有一个目录,里边放着一些按年月命名的目录。因为这个目录结构已经确定下来了,而且很多组都在使用,不能随便改动。我们有一个任务就是每天定时去最新的年月目录里拷贝build。麻烦的是,第一、文件夹时按照12.1、12.2。。。12.10、12.11、12.12、13.1。。。这样命名的;第二、从时间上没法找,因为最新的目录不是在月底,而是在月中的某一天生成的。以Cmd命令有限的编程能力,肯定是不好解决这个问题的。我最终写了一个PowerShell的脚本文件,在Cmd的脚本中调用,终于解决了这个问题。
. ]! L. b0 D; o- V# _2 J0 F* `* t& T8 v4 t6 Q- b$ u4 c/ ^4 o
在PowerShell命令中调用Cmd命令8 N/ u# Q% f/ P% O
       由于PowerShell强大的管道功能,在PowerShell命令或者脚本中调用Cmd命令并获得返回结果是件很容易的事情,是否获得结果对于调用Cmd命令的方式也没有影响。请看如下示例:
7 L1 g- }9 L8 D. w3 [$ a$ ~3 i* B+ w
cmd /c dir: f  O( i- r0 X# P9 l. ^9 Q
$a = (cmd /c dir)
4 g8 \7 J! _- e1 t$a
* \1 ~# c) w/ ?6 M以上示例中,第1行的执行结果,和后两行的执行结果是一样的。不同点是,后者的执行结果被保存了下来,前者只是将结果打印在屏幕上。
; t+ X2 b3 {0 v+ V" y. P5 i3 M+ i8 s# }& O
  为什么需要在PowerShell中调用Cmd命令呢(既然PowerShell有如此强大的Shell以及编程特性)?其实原因也很简单。在PowerShell之前我们有很多很好用的Cmd命令、工具和控制台程序,如果完全丢弃他们并使用PowerShell重写的话,那绝对是浪费。要知道,能够利用最小的改变来高效地完成任务,才是我们的目标。
3 X$ B0 r' l. K- W9 z: G; i1 M( R# G9 O" B) j
结语
( M6 S# C, }5 J  一个新的语言,如果不能与已有的资源兼容和沟通,那么它注定不能成为大众的选择(也许可能在小众中流行),最终将被遗弃和忘记。PowerShell与现有系统良好沟通性有目共睹,从它与Cmd命令的关系可见一斑。$ X  _. t$ V1 C2 [8 y$ n! H( Q" x
/ T. w$ M& n3 ?3 ~1 L) q

: T: B% X8 q: W5 J# A8 `( t' u
上一篇
下一篇


映画 「出类拔萃」 2018-4-30 21:09 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

佩服佩服!#j325:
深海里的那抹蓝 「龙战于野」 2018-5-3 18:19 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

看帖要回,回帖才健康,在踩踩,楼主辛苦了!
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

关于本站|大事记|小黑屋|古黑论 网站统计

GMT+8, 2021-9-25 09:14 , Processed in 0.019803 second(s), 19 queries , Redis On.

© 2015-2021 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表