2009-09-26 139 views

回答

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),这些cmdlet具有破坏性,无需实际执行破坏性操作即可查看命令“将”执行的操作。这是非常方便的,当你想基于一个通配符如杀进程:

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

另一种选择是使用-Co​​nfirm,它会问你的每一个过程,你可以告诉它是,否,是所有,没有。从生产角度来看,我认为PowerShell相对于此处介绍的某些其他选项具有相当明显的优势。我只是在说'。 :-)

+0

哇,这很好! :) 你从哪里学习PowerShell?我在.zip中下载了无用的* .doc文件,无法从中学习任何有用的东西。 – Henry 2009-09-26 01:52:03

+1

@Henry,忽略官方教程。这是无用的。网络上有更好的教程。 – 2009-09-26 02:00:41

+2

亨利,看看我写的这个免费电子书(简称) - http://tinyurl.com/efposh。还可以看看这本完整免费的书:http://powershell.com/cs/blogs/ebook/由Tobias Weltner博士撰写。如果您决定跳入PowerShell足以保证购买一本书,请查看:http://www.manning.com/payette2/。顺便说一句,自从PDC 2003以来,我一直在关注PowerShell,并且在过去四年中一直是PowerShell MVP。 – 2009-09-26 02:01:54

2

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

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

+0

在Perl中,使用File :: Find模块递归遍历或遍历当前目录的直接子目录。 – DVK 2009-09-26 01:13:50

+0

我认为在perl或python中很容易,但我不希望安装任何东西作为这个简单脚本的前置请求。谢谢。 – Henry 2009-09-26 01:24:52

+0

在第二个想法中,PowerShell需要在Windows运行.ps1之前安装。 – Henry 2009-09-26 01:55:29

2

我会推荐你​​最擅长完成这项任务,特别是如果你必须定期完成这项任务。批处理文件,PowerShell,VBScript,JScript,Ruby,Perl,Python,C#等等。不管你能更快地做到这一点。

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

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

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

链接:

+0

thx,我可以在哪里学习如何使用JScript来完成我的任务? – Henry 2009-09-26 01:18:33

+0

我添加了一些应该对你有用的链接=] – snicker 2009-09-26 01:28:28

+0

ok,PowerShell赢了:http://www.microsoft.com/technet/scriptcenter/resources/qanda/jan07/hey0126.mspx与http:// thepowershellguy相比。 COM /博客/豪华/存档/ 2007/1月27日/嘿,PowerShell的家伙,怎么-可以-I-GET-A-列表中,所有的子文件夹-IN-A-文件夹和则 - put-that-list-into-an-array.aspx – Henry 2009-09-26 01:54:30

1

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

1

如果你必须赶紧用你认识的语言去做这个工作!否则,如果您愿意学习新的东西,并且每天使用Windows操作盒,请使用PowerShell。 PowerShell现在已经遍布MS产品,如Exchange 2007,SQL Server 2008,并且随Windows 7一起安装。