【发布时间】:2021-06-17 08:37:33
【问题描述】:
我正在尝试从 Powershell 中的 Get-ChildItem 获得的结果中提取对象的属性,如下所示
$folderPath = "C:\Users\me\someThing1\someThing2"
$fileNames = Get-ChildItem -Path $folderPath -Filter *.pdf -recurse | ForEach-Object {
$_.FullName
$_.LastWriteTime
$_.Exists
$_.BaseName
$_.Extension
}
# Extracting properties
foreach ($file in $fileNames) {
Write-Host $file
}
当我使用 Write-Host 命令时,我将 FullName、LastWriteTime、Exists、BaseName、Extension 的属性值打印到每个文件的终端。但我无法获得个人财产价值。
例如,我尝试过
Write-Host $file."BaseName"
它不起作用。有人可以帮我从每个文件中提取单个属性吗? 目的是将每个文件的每个属性存储到一个数组中,如下所示
$FullNames = @()
$LastWriteTimes = @()
$Exists = @()
$BaseNames = @()
$Extensions = @()
【问题讨论】:
-
完全移除 ForEach-Object
-
是的。您也不需要在每个数组上保存每个属性。即:在您执行
$fileNames = Get-ChildItem -Path $folderPath -Filter *.pdf -recurse之后,您所有文件的“全名”将在这里$fileNames.FullName,“lastWriteTime”将在这里$fileNames.lastWriteTime等等。 -
这两个是正确的。此外,即使在这种情况下不需要它,您也应该在保存输出时尝试切换到
[System.Collections.ArrayList]而不是固定数组。 -
另外,
Write-Host几乎总是不好用。如果您想将属性投射到您的 PS 主机,您可以在您的foreach循环中执行$file.BaseName,或者如果您需要一个字符串,您可以执行"Base Name: {0}" -f $file.BaseName或"Base Name: $($file.BaseName)" -
谢谢大家。你帮了大忙!
标签: arrays powershell object get-childitem