使用PowerShell过滤和复制

时间:2009-01-26 14:17:25

标签: powershell

在我寻求提高PowerShell技能的过程中,这是一个简单问题的丑陋解决方案的例子。欢迎提出如何改进oneliner的任何建议。

使命:将一个巨大的图标库修剪成更易于管理的东西。原始目录结构如下所示:

  /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位Alpha 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

你会怎么做?

1 个答案:

答案 0 :(得分:0)

三条评论:

  • 在第一次测试后,您并未隐式对结果进行排序。这可能无关紧要(无论如何它们都可能会被排序)但是因为你正在构建一个基于Parent.Parent的目录结构......我可以设想一个PNG图像列表,它会导致某种类型(没有双关语)问题。
  • 也许我老了,但我发现 dir gci 更具可读性。在我自己的脚本中,我通常会尝试扩展大多数别名,因为它往往会提高PowerShell更新的可读性和可维护性。
  • 不是将所有内容链接在一起,而是将块拆分为变量并将其封装在cmdlet /函数中是有意义的。