我应该使用PowerShell还是CMD.exe?

时间:2009-09-26 00:57:48

标签: windows powershell cmd

我应该用什么来完成下面描述的任务?

任务:

  
      
  1. 横向进入文件夹的每个子文件夹
  2.   
  3. 如果子文件夹具有文件夹名称XXX,则调用某些命令
  4.   

5 个答案:

答案 0 :(得分:7)

如果您决定使用PowerShell,这是我推荐的,这项任务非常简单:

PS> Get-ChildItem <path> -r | Where {$_.PSIsContainer -and $_ -match '<regex>'} |
    Foreach { <do something with each DirectoryInfo object stored in $_> }

使用别名的短版本是(注意此版本以递归方式从当前目录中删除指定的目录):

PS> dir . -r | ?{$_.PSIsContainer -and $_ -match 'Backup'} | Remove-Item -v -wh

此版本显示了它将删除哪些目录而不实际删除它们。删除-wh(whatif)以使其实际删除文件夹并告诉您删除了哪些文件夹。这是PowerShell的“生产”方面。您可以在大多数具有破坏性的cmdlet上使用-WhatIf(或-wh),以便在不实际执行破坏性操作的情况下查看命令“将”执行的操作。当您想要基于通配符杀死进程时非常方便,例如:

PS> Get-Process *host | Stop-Process -WhatIf

另一个选择是使用-Co​​nfirm,它会询问你每个进程,你可以告诉它是,不,是对所有人,对所有人都是。从生产的角度来看,我认为PowerShell比其他一些选项有明显的优势。我只是在说'。 : - )

答案 1 :(得分:2)

PowerShell如果介于这两者之间。 CMD.exe太痛苦了。

替代品是脚本语言,如Perl和Python。

答案 2 :(得分:2)

我建议您完成此任务时最舒服的事情,特别是如果您必须定期执行此任务。批处理文件,powershell,VBScript,JScript,Ruby,Perl,Python,C#等等。无论你能做得多么快。

Powershell和更高端的内容将为您提供更多控制权,但您甚至可以使用带有VBScript或JScript的Windows脚本宿主执行此操作。在Powershell之前,我会通过编写简单的VB脚本并使用WScript运行它来处理许多这样的简单任务。

我还应该提一下,如果你需要在另一台机器上使用这么简单的脚本,你几乎可以保证如果它是Windows XP或更高版本,WScript将会在那里,而Powershell只适用于较新版本的Windows。或者使用C#...如果你知道的话。无论你是否意识到,你的机器上都可能有C#编译器。

简单示例: 在我的音乐收藏中,我需要将所有文件的属性设置为隐藏图像相关扩展和音乐播放列表扩展,以防止Windows Media Player自动将这些文件添加到我的库中。它将在图片库中填充各种专辑封面。我刚刚编写了一个快速的JScript,它使用WScript.exe执行遍历目录结构并设置这些属性。我定期运行它,当我收到新音乐时,iTunes或WMP会自动将这些图像添加到目录中。

链接:

答案 3 :(得分:1)

我已经在VBScript中完成了这一百万次。它只需要一对精简的递归函数即可完成。而且,作为VBScript,可以完成整个“它”。

答案 4 :(得分:1)

如果你必须用你所熟悉的语言匆匆忙忙地完成这项工作!否则,如果您愿意每天学习新东西并使用Windows机箱,请使用PowerShell。 PowerShell现在遍布MS产品,如Exchange 2007,SQL Server 2008,并随Windows 7一起安装。