此代码可以正确显示ImageName和FolderName,但是Dimension仍为空白。正确显示的数据不会保存在csv文件中。
此外,如果基于尺寸的条件不起作用。
#-----------powershell script------------
foreach ($folder in $Folders) {
$Images = Get-ChildItem -Path $Folder -Filter *.png
$Results = @()
foreach ($image in $Images) {
$dimensions = $image.Dimensions
# $dimensions = "$($image.Width) x $($image.Height)"
If ($dimensions -ne '1000 x 1000') {
$Results += [pscustomobject]@{
ImageName = $image
FolderName = $Folder
Dimension = $dimensions
}
}
}
$Results | FT -auto
# $ExcelData= Format-Table -property @{n="$image";e='$Folder'}
$Results | Export-csv "C:\Users\M1036098\Documents\Imagelessthan1000pi.txt" -NoTypeInformation
}
输出中的尺寸属性保持空白
答案 0 :(得分:2)
所以让我们回顾一下为什么这不起作用。 Get-ChildItem
带回对象System.Io.FileInfo
System.IO.FileIonfo我们可以从Microsoft看到没有名为Dimensions的方法或属性。
然后让我们获取这些尺寸...
首先,我们将图像加载到内存中并获取大小。
$Folders = @("C:\Test")
$Folders | %{
$Folder = $_
Get-ChildItem -Path $_ -Filter *.png | %{
try{
$Image = New-Object System.Drawing.Bitmap "$($_.FullName)"
[pscustomobject]@{
ImageName = $_.Name
FolderName = $Folder
Dimension = "$($Image.Height) x $($Image.Width)"
}
}catch{
}
} | ?{
$_.Dimension -ne "1000 x 1000"
}
}
输出类似于
ImageName FolderName Dimension
--------- ---------- ---------
Test1.png C:\Test 1440 x 2560
Test2.png C:\Test 1200 x 1200
编辑:为Sonam添加功能。基于已发布的答案。
function Get-ImageDimension([string]$Path, [array]$ImageExtensions, [array]$ExcludeDimensions){
Get-ChildItem -Path $Path -Include $ImageExtensions -Recurse | foreach-object{
try{
$image = [Drawing.Image]::FromFile($_);
[pscustomobject]@{
ImageName = $_.Name
FolderName = $_.DirectoryName
Dimension= "$($image.Width) x $($image.Height)"
}
}catch{
}
} | ?{
$ExcludeDimensions -notcontains $_.Dimension
}
}
Get-ImageDimension C:\Test\ -ImageExtensions *.png -ExcludeDimensions "1000 x 1000" | export-csv C:\Test\Test.csv
答案 1 :(得分:0)
感谢您的解决方案。我使用System.Drawing重写了代码。 代码段:
try{
$FolderBase= "E:\D\Demo\Demo\"
$Folders= get-ChildItem "$FolderBase*" |
foreach ($folder in $Folders){
$Images=Get-ChildItem -Path $Folder -Filter *.png
$Results = @()
#$image=(Get-ChildItem -Path $Folder *.png)
$Images | ForEach-Object {
$img = [Drawing.Image].FromFile($_);
$dimensions = "$($img.Width) x $($img.Height)"
If ($dimensions -ne "1000 x 1000") {
$Results += [pscustomobject]@{
ImageName = $img
FolderName = $Folder
Dimension= $dimensions
}
}
}
}
$Results | FT -auto
# $ExcelData= Format-Table -property @{n="$image";e='$Folder'}
$Results|Export-csv "C:\Users\****\Documents\Imagelessthan1000pi.txt" -NoTypeInformation
}catch{
}
现在,我得到了预期的结果,但是
我无法将数据写入文件。(excel(首选),csv,文本)。我尝试了File和Export-csv。
其中一个文件夹不包含任何大尺寸(最大700 kb)图像。在该特定文件夹上执行循环时, 引发内存异常,它不会遍历所有 图片。