Powershell: для каждой папки добавьте все имена файлов

#powershell #file #foreach #directory

#powershell #файл #foreach #каталог

Вопрос:

Я просматриваю папки в каталоге и вывожу их имена в файле Excel. Теперь я хотел бы перечислить все файлы, содержащиеся в папке (в одной строке). Как я могу записать имена файлов в «Masken» в $ UserObject?

Я хочу, чтобы мой Excel выглядел так:

 Datum      |Nummer|...|Masken
2020-01-01 | 43   |...|filename1, filename2
2020-02-05 | 44   |...|filenamex, filenamey, filenamez
 

Это мой сценарий Powershell:

 $Folder="C:DATENPowershell"
$FolderNames=Get-ChildItem -Path $Folder -Directory| Select-Object -ExpandProperty Name
$Daten = ForEach($FolderName in $FolderNames){

    $UserObject = New-Object -TypeName PSObject | Select-Object Datum,Nummer,Art,Programmierer,Name,Masken
        
    $UserObject.Datum = $FolderName.Substring(0,10)
    $UserObject.Nummer =  ($FolderName.Split(' '))[1]
    $FolderName = $FolderName.Substring(14)

    If($FolderName -like "M*" ) { 
    $UserObject.Art = 'Modul'
    }

    If($FolderName -like "F*" ) {
    $UserObject.Art = 'Programmierung'
    }

    $FolderName = $FolderName.Substring(2)

    $UserObject.Programmierer = ($FolderName.Split(' '))[0]
    $UserObject.Name = ($FolderName.Split(' ', 2))[1]
    $UserObject
  
}

$Daten | Export-CSV -NoTypeInformation -Path "$env:Tempdaten.csv" -UseCulture -Encoding Default
amp; "$env:Tempdaten.csv"
 

Комментарии:

1. выполните a G-CI в текущем каталоге, выберите только значение name, а затем используйте -join ', ' , чтобы превратить этот список в строку.

Ответ №1:

попробуйте это

 $Folder="C:DATENPowershell"
$ResultFile="$env:Tempdaten.csv"

Get-ChildItem $Folder -Directory | %{

    $UserObject = New-Object -TypeName PSObject | Select-Object Datum,Nummer,Art,Programmierer,Name,Masken
        
    $UserObject.Datum = $_.Name.Substring(0,10)
    $UserObject.Nummer =  ($_.Name.Split(' '))[1]
    $FolderName = $_.Name.Substring(14)

    If($FolderName -like "M*" ) { 
    $UserObject.Art = 'Modul'
    }
    ElseIf($FolderName -like "F*" ) {
    $UserObject.Art = 'Programmierung'
    }

    $FolderName = $FolderName.Substring(2)

    $UserObject.Programmierer = ($FolderName.Split(' '))[0]
    $UserObject.Name = ($FolderName.Split(' ', 2))[1]

    #your search i think
    $UserObject.Masken=(Get-ChildItem -File).Name -join ', '
    $UserObject
  
} | Export-CSV -NoType $ResultFile -UseCulture -Encoding Default

amp; $ResultFile
 

Комментарии:

1. Спасибо, это в основном то, что я хочу. Тем не менее, трудность, с которой я сталкиваюсь, заключается в получении имен файлов не из $Folder, а из подпапки (из $Folder), которую я сейчас анализирую.

2. Я пытаюсь это сделать, но безрезультатно: $UserObject.Masken = ($_ Get-ChildItem -File). Имя -соединение ‘, ‘

3. Оказывается, я глуп. Решение таково: $UserObject.Masken = (Get-ChildItem $_ -File). Name -join ‘, ‘ Большое вам спасибо!