2009-01-26 106 views
0

爲了提高我的PowerShell技能,下面是一個簡單問題的難題解決方案示例。任何建議如何改善oneliner是值得歡迎的。使用PowerShell過濾和複製

任務:修剪一個巨大的圖標庫,使其更易於管理。原來的目錄結構看起來像這樣:

 
    /Apps and Utilities 
    /Compile 
     /32 Bit Alpha png 
     /Compile 16 n p.png 
     /+ 10 or more files 
     /+ 5 more formats with 10 or more files each 
    /+ 20 or so icon names 
    /+ 22 more categories 

我想複製32位阿爾法PNG和平坦的目錄結構了一下。這是我的快速和非常骯髒的解決方案:

 
$dest = mkdir c:\icons; gci -r | ? { $_.Name -eq '32 Bit Alph 
a png' } | % { mkdir ("$dest\" + $_.Parent.Parent.Name + "\" + $_.Parent.Name); $_ } | gci | % { cp $_. 
FullName -dest ("$dest\" + $_.Directory.Parent.Parent + "\" + $_.Directory.Parent) } 

不好,但它解決了我的問題。產生的結構:

 
    /Apps and Utilities 
    /Compile 
     /Compile 16 n p.png 
     /etc 
    /etc 
    /etc 

你會怎麼做?

回答

0

三種意見:

  • 你是不是暗示你的第一次測試後分類結果。這可能並不重要(它們可能會按順序排序),但是由於您正在構建基於Parent.Parent的目錄結構,因此我可以設想一個PNG圖像列表,這會導致某種類型的(無雙關語意圖的)問題。
  • 也許我是老式的,但我發現dirgci更具可讀性。在我自己的腳本中,我通常會嘗試擴展大多數別名,因爲它們往往會提高PowerShell新版本的可讀性和可維護性。
  • 除了將所有東西鏈接在一起之外,將塊拆分爲變量並將其封裝到cmdlet /函數中是有意義的。
+0

將考慮排序。在編寫腳本時,我擴展了大部分別名,但是我喜歡我的簡化版 - ls(或dir)比gci更好的選擇:)。 – Bergius 2009-01-27 10:53:04