【问题标题】:Should I use PowerShell or CMD.exe for this?我应该为此使用 PowerShell 还是 CMD.exe?
【发布时间】:2010-12-01 14:17:41
【问题描述】:

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

任务:

  1. 遍历文件夹的每个子文件夹
  2. 如果子文件夹的文件夹名称为 XXX,则调用某些命令

【问题讨论】:

    标签: windows powershell cmd


    【解决方案1】:

    如果您决定使用 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
    

    另一个选项是使用 -Confirm,它会询问您每个进程,您可以告诉它是,否,对所有都是,对所有都不是。从生产的角度来看,我认为 PowerShell 比这里介绍的其他一些选项具有非常明显的优势。我只是说。 :-)

    【讨论】:

    • 哇,这太棒了! :) 你在哪里学习 PowerShell?我以 .zip 格式下载了无用的 *.doc,但无法从中学到任何有用的东西。
    • @Henry,请忽略官方教程。这是没用的。网上有很多更好的教程。
    • Henry,看看我写的这本免费电子书(很短)-tinyurl.com/efposh。还可以查看这本完整的免费书籍:powershell.com/cs/blogs/ebook Tobias Weltner 博士。如果您决定跳入 PowerShell 足以保证购买一本书,请查看:manning.com/payette2。顺便说一句,我从 PDC 2003 开始​​就一直在关注 PowerShell,并且在过去的四年里一直是 PowerShell MVP。
    【解决方案2】:

    我会推荐您最适合完成此任务的任何方式,尤其是在您必须定期执行此任务的情况下。批处理文件、powershell、VBScript、JScript、Ruby、Perl、Python、C# 等等。无论您做什么都可以更快。

    Powershell 和更高端的东西会给你更多的控制,但你甚至可以使用带有 VBScript 或 JScript 的 Windows Script Host 来做到这一点。在使用 Powershell 之前,我会通过编写简单的 VB 脚本并使用 WScript 运行它们来处理许多类似的简单任务。

    我还应该提到,如果您需要在另一台机器上使用如此简单的脚本,您几乎可以保证 WScript 会在 Windows XP 或更高版本上运行,而 Powershell 仅在较新版本的 Windows 上运行。或者使用 C#... 如果你知道的话。不管你是否意识到,你的机器上可能有 C# 编译器。

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

    链接:

    【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 在 Perl 中,使用 File::Find 模块递归遍历或使用 glob 遍历当前目录的直接子级。
    • 我认为在 perl 或 python 中会很容易,但我不希望安装任何东西作为这个简单脚本的先决条件。谢谢。
    • 第二个想法是,在 windows 也可以运行 .ps1 之前,需要安装 PowerShell。
    • Windows 7 和 Server 2008 R2 附带 PowerShell(它不是可选的)。如果您已经安装了 .NET 2.0,则 XP/Vista/Server 2003/2008R1 上的 PowerShell 下载非常小(
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      如果您必须匆忙完成这项工作,请使用您知道的语言!否则,如果您愿意学习新东西并每天使用 Windows 机器,请使用 PowerShell。 PowerShell 现在遍布 MS 产品,例如 Exchange 2007、SQL Server 2008,并安装在 Windows 7 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        • 1970-01-01
        • 2021-02-12
        • 2012-08-19
        • 1970-01-01
        • 1970-01-01
        • 2018-09-05
        相关资源
        最近更新 更多