я могу включить корневую папку для вывода get-childitem программно? - PullRequest
4 голосов
/ 21 апреля 2011

Если я запускаю эту простую команду:

gci e:\mytree -r | select fullname

, она выдает следующее:

E:\mytree\folder1                                                                                                                                                                      
E:\mytree\folder2                                                                                                                                                                      
E:\mytree\folder3                                                                                                                                                                      
E:\mytree\file1.txt                                                                                                                                                                    
E:\mytree\file12.txt                                                                                                                                                                   
E:\mytree\folder1\folder.with.dots                                                                                                                                                     
E:\mytree\folder1\folder.with.dots\file inside folder with dots.txt                                                                                                                    
E:\mytree\folder3\file4.doc     

Есть ли способ включить в выходной файл даже корневую папку, чтобы я могесть

E:\mytree
E:\mytree\folder1                                                                                                                                                                      
E:\mytree\folder2                                                                                                                                                                      
E:\mytree\folder3                                                                                                                                                                      
E:\mytree\file1.txt                                                                                                                                                                    
E:\mytree\file12.txt                                                                                                                                                                   
E:\mytree\folder1\folder.with.dots                                                                                                                                                     
E:\mytree\folder1\folder.with.dots\file inside folder with dots.txt                                                                                                                    
E:\mytree\folder3\file4.doc    

Ответы [ 5 ]

4 голосов
/ 21 апреля 2011
get-childitem $root -recurse | foreach-object -begin { $arr = @((get-item $root).fullname) } -process { $arr+= $_.fullname } -end { $arr }

Используя переключатель начала командлета foreach-object, мы выполняем некоторую работу перед обработкой объектов из get-childitem: мы создаем массив и помещаем туда путь к корню.

Затем для каждого объекта в конвейере мы добавляем его путь к массиву.

Наконец, мы выводим массив в конвейер.

3 голосов
/ 18 марта 2015
@(gi e:\mytree) + @(gci e:\mytree -r) | select fullname

@ (..) заставляет возвращаемое значение из каждого выражения быть массивом

0 голосов
/ 11 сентября 2017

Вот мое «старое школьное» решение этой проблемы. Для меня это намного легче использовать и читать.

# add all the file Paths to an array so the Parent can be included
$ToUpdate = @()

$FolderToUpdate = Get-ChildItem $DirectorytoChange -Directory

foreach ($Folder in $FolderToUpdate)
{
  #add the paths to the array
  $ToUpdate += $Folder.FullName
}
# Include the Root
$ToUpdate += $DirectorytoChange


foreach ($Path in $ToUpdate)
{
# Do stuff
}
0 голосов
/ 21 апреля 2011

Это идея, которая у меня была

function get-tree($folder) {
if (!(test-path $folder)) {
        write-host "$folder doesn't exist"
        return
    }
else {
        $arr = @()
        $Object = New-Object PSObject -Property @{
        fullname = $folder
        }
        $arr+=$object
        gci $folder -r | % {
                              $Object = New-Object PSObject -Property @{
                              fullname = $_.fullname
                              }
                              $arr+=$object 
                            }

    }
$arr  
}

get-tree E:\mytree


E:\mytree                                                                                                                                                                              
E:\mytree\folder1                                                                                                                                                                      
E:\mytree\folder2                                                                                                                                                                      
E:\mytree\folder3                                                                                                                                                                      
E:\mytree\file1.txt                                                                                                                                                                    
E:\mytree\file12.txt                                                                                                                                                                   
E:\mytree\folder1\folder.with.dots                                                                                                                                                     
E:\mytree\folder1\folder.with.dots\file inside folder with dots.txt                                                                                                               
E:\mytree\folder3\file4.doc       

Но я подожду других советов.:)

0 голосов
/ 21 апреля 2011

Обновление: я перечитал вопрос еще раз и понял, что ваше требование другое.Посмотрим, как это можно сделать прямо сейчас.:)

СТАРЫЙ ОТВЕТ

PSParentPath содержит родительскую папку.Если вы ссылаетесь на root как в E: \, вы можете получить его, используя root свойство.

gci C:\Scripts -Recurse | Select FullName, PSParentPath

или во втором случае

gci C:\Scripts -Recurse | Select FullName, root
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...