Фильтрация и копирование с помощью PowerShell - PullRequest
0 голосов
/ 26 января 2009

В своем стремлении улучшить свои навыки 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-битные альфа-файлы 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 голосов
/ 26 января 2009

Три комментария:

  • Вы не сортируете результаты неявным образом после первого теста. Это, вероятно, не имеет значения (они все равно будут отсортированы), но так как вы создаете структуру каталогов на основе Parent.Parent ... Я мог бы составить список изображений PNG, которые могли бы вызвать какой-то (не каламбур) проблема.
  • Возможно, я старомоден, но нахожу dir гораздо более читабельным, чем gci . В своем собственном сценарии я обычно стараюсь расширить большинство псевдонимов, поскольку это улучшает читабельность и удобство обслуживания для тех, кто новее в PowerShell.
  • Вместо того, чтобы просто связывать все воедино, имеет смысл разбивать фрагменты на переменные и инкапсулировать это в командлет / функцию.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...