我目前正在使用此脚本从给定路径中提取名称,文件夹,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 } }
完成整个文件路径。
任何帮助非常感谢。
答案 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
输出)具有属性Name
和FullName
,其中包含文件夹的名称和完整路径。它们还有一个属性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