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

时间:2016-10-13 23:04:38

标签: powershell

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

   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

我无法让@{ n = 'Fullname'; e = { Convert-Path $_.PSParentPath } }完成整个文件路径。

任何帮助非常感谢。

2 个答案:

答案 0 :(得分:2)

当您想要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

但是,正如其他人所指出的那样,完整路径是Get-ChildItem生成的输出对象的标准属性,因此您只需引用FullName属性:

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

PS:'\\'将作为-split运算符的RHS,但如果您希望跨平台友好,则可以使用[\\/]

答案 1 :(得分:1)

DirectoryInfo个对象(文件夹的Get-ChildItem输出)具有属性NameFullName,其中包含文件夹的名称和完整路径。它们还有一个属性Parent,它返回父文件夹的另一个DirectoryInfo对象。您可以将该信息添加为calculated property

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

$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