【发布时间】:2010-12-01 14:17:41
【问题描述】:
我应该使用什么来完成下面描述的任务?
- CMD.exe?
- PowerShell?
- Windows Script Host 使用 VBScript 还是 JScript?
任务:
- 遍历文件夹的每个子文件夹
- 如果子文件夹的文件夹名称为 XXX,则调用某些命令
【问题讨论】:
标签: windows powershell cmd
我应该使用什么来完成下面描述的任务?
任务:
- 遍历文件夹的每个子文件夹
- 如果子文件夹的文件夹名称为 XXX,则调用某些命令
【问题讨论】:
标签: windows powershell cmd
如果您决定使用 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、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 会自动将这些图像添加到目录中。
链接:
【讨论】:
PowerShell 如果它介于这两者之间。 CMD.exe 太痛苦了。
替代品是脚本语言,例如 Perl 和 Python。
【讨论】:
我已经在 VBScript 中做过一百万次了。只需要一对精简的递归函数就可以完成“它”。而且,作为 VBScript,可以完成一整套“它”。
【讨论】:
如果您必须匆忙完成这项工作,请使用您知道的语言!否则,如果您愿意学习新东西并每天使用 Windows 机器,请使用 PowerShell。 PowerShell 现在遍布 MS 产品,例如 Exchange 2007、SQL Server 2008,并安装在 Windows 7 中。
【讨论】: