2015-12-30 3 views
2

Так я используюHandling выход FileSystemInfo массива

$list = Get-ChildItem $path -filter *xml 

на данном пути, чтобы найти все файлы XML в нем. Похоже, что создается массив типизированных объектов FileSystemInfo.

Есть ли лучший способ перечислить имена таким образом, который является плавным и простым? Вещи становятся шаткий очень быстро, когда я начинаю использовать

$list | ft 

И такие на ней - потому что я считаю, что это их обработки в качестве объектов. Что ожидается. Но не совсем то, что я собираюсь.

У вас есть руководящие указания высокого уровня по поводу того, что я имею в виду здесь, и лучший способ в PS, чтобы разбить его произвольным образом - т.е. читаемым человеком. Является ли петля foreach() лучшей идеей? Я чувствую, что это сработает, но не идеально.

+0

Пример: 'Get-ChildItem $ путь -filter * XML | Select-Object -ExpandProperty Name'. Это отобразит только значение свойства Name для каждого найденного файла. Если вы хотите полный путь, попробуйте использовать 'FullName'. – sodawillow

+0

Это действительно зависит от того, что вы хотите с этим делать. Многие командлеты соответствуют параметру по имени свойства. Поэтому вам вообще не нужно использовать структуру циклов per se.У вас есть пример того, как вы хотите, чтобы он выглядел, возможно,? – Matt

+0

Необходимо быть осторожным, так как вы будете соответствовать папкам, которые также заканчиваются в xml. '-file' будет обращаться к тому, что предполагается, что у вас есть v3 или выше. – Matt

ответ

0

Это действительно звучит как вы просите Select-Object, которые:

выбирает указанный свойства объекта или набора объектов.

Вы упомянули, что ищете удобный для чтения метод для перечисления имен?

Как sodawillow говорит, что вы можете просто извлечь, что одно свойство, чтобы получить массив имен

В PowerShell V2. Нужно быть осторожным, так как вы будете соответствовать папкам, которые также заканчиваются в xml.

Get-ChildItem $path -filter *xml | Select-Object -ExpandProperty Name 

В PowerShell V3 +

(Get-ChildItem $path -Filter *xml -File).Name 

Но что бы получить только вам строки. Как вы их обрабатываете? Простой foreach был бы самым простым, хорошо округленным подходом.

(Get-ChildItem $path -Filter *xml -File).Name | ForEach-Object{"The file name is $_"} 

Однако, если вы делаете что-то другим, как перемещение файла есть командлеты, которые будут обрабатывать вывод Get-ChildItem напрямую, без необходимости явного зацикливания.

Get-ChildItem $path -Filter *xml -File | Move-File -Destination "C:\temp" 

Это работает из-за соответствующих параметров по имени свойства, которые Move-Item и многих других командлетов, можно сделать.

-Path Указывает путь к текущему местоположению элементов. По умолчанию используется текущий каталог. Подстановочные знаки разрешены.

Aliases      none 
Required?      true 
Position?      1 
Default Value     none 
Accept Pipeline Input?   true (ByValue, ByPropertyName) 
Accept Wildcard Characters? false 
Смежные вопросы