2009-09-26 55 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一起安裝。

相關問題