#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 ‘, ‘ Большое вам спасибо!