【问题标题】:Powershell: For each folder, append all file namesPowershell:对于每个文件夹,附加所有文件名
【发布时间】:2021-03-21 08:06:18
【问题描述】:

我正在搜索目录中的文件夹并将它们的名称输出到 Excel 文件中。 现在我想列出每个文件夹中包含的所有文件(在一个字符串中)。 如何将文件名写入 $UserObject 中的“Masken”?

我希望我的 Excel 看起来像这样:

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

这是我的 Powershell 脚本:

$Folder="C:\DATEN\Powershell"
$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:Temp\daten.csv" -UseCulture -Encoding Default
& "$env:Temp\daten.csv"

【问题讨论】:

  • 在当前目录上做一个G-CI,只选择名称值,然后使用-join ', '将该列表变成一个字符串。

标签: powershell file foreach directory


【解决方案1】:

试试这个

$Folder="C:\DATEN\Powershell"
$ResultFile="$env:Temp\daten.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

& $ResultFile

【讨论】:

  • 谢谢,这基本上就是我想要的。然而,我遇到的困难是不是从 $Folder 获取文件名,而是从我当前正在解析的子文件夹($Folder)获取文件名。
  • 我正在尝试这个,但无济于事:$UserObject.Masken = ($_ Get-ChildItem -File).Name -join ', '
  • 原来我很愚蠢。解决方法是: $UserObject.Masken = (Get-ChildItem $_ -File).Name -join ', ' 非常感谢!
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
相关资源
最近更新 更多