使用 Get-ChildItem 检索文件夹、名称、全名

Car*_*los 5 powershell

我目前正在使用此脚本从给定路径中提取名称、文件夹、文件夹名称:

   Get-ChildItem "C:\user\desktop"  | Select Name, `
  @{ n = 'Folder'; e = { Convert-Path $_.PSParentPath } }, `
  @{ n = 'Foldername'; e = { ($_.PSPath -split '[\\]')[-2] } } ,
  @{ n = 'Fullname'; e = { Convert-Path $_.PSParentPath } } |
    Export-Csv "C:\user\desktop\txt.txt" -Encoding Utf8 -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)

我在获取时遇到问题 @{ n = 'Fullname'; e = { Convert-Path $_.PSParentPath } }通过完整的文件路径。

非常感谢任何帮助。

Ans*_*ers 6

DirectoryInfoGet-ChildItem对象(文件夹的输出)具有属性Name以及FullName文件夹的名称和完整路径。它们还有一个属性,可以返回父文件夹的Parent另一个对象。DirectoryInfo您可以将该信息添加为计算属性

由于您基本上想要添加列出的项目的祖父母名称和路径,并且该信息不会更改,因为您不递归,因此您可以确定它们一次并将它们添加为静态信息:

$dir = 'C:\some\folder'

$folder     = (Get-Item $dir).Parent
$folderName = $folder.Name
$folderPath = $folder.FullName

Get-ChildItem $dir |
    Select-Object Name, FullName,
        @{n='FolderName';e={$folderName}},
        @{n='Folder';e={$folderPath}} |
    Export-Csv 'C:\path\to\output.csv' -Encoding UTF8 -NoType
Run Code Online (Sandbox Code Playgroud)


mkl*_*nt0 6

PSParentPath当您打算PSPath获取全名(完整文件系统路径)时,您错误地引用了:

Get-ChildItem "C:\user\desktop" | Select Name, `
  @{ n = 'Folder'; e = { Convert-Path $_.PSParentPath } }, `
  @{ n = 'Foldername'; e = { ($_.PSPath -split '[\\]')[-2] } } ,
  @{ n = 'Fullname'; e = { Convert-Path $_.PSPath } }  # NOT $_.PS*Parent*Path
Run Code Online (Sandbox Code Playgroud)

但是,正如其他人所指出的,完整路径是由 生成的输出对象的标准属性Get-ChildItem,因此您可以简单地引用该FullName属性:

Get-ChildItem "C:\user\desktop" | Select Name, `
  @{ n = 'Folder'; e = { Convert-Path $_.PSParentPath } }, `
  @{ n = 'Foldername'; e = { ($_.PSPath -split '[\\]')[-2] } } ,
  FullName
Run Code Online (Sandbox Code Playgroud)

PS:'\\'将作为-split运营商的RHS ,但如果你想跨平台友好,你可以使用[\\/]

注意:上面使用的基于哈希表的技术(@{ n = ...; e = ... },其中nNameefor 的缩写Expression)称为计算属性,在概念about_Calculated_Properties帮助主题中进行了描述,适用于所有支持计算属性的 cmdlet。