我有以下脚本,可以将纵向图像移动到名为“肖像”的子文件夹。
它运行得很好,但前提是脚本位于与图像相同的文件夹中并从中执行。这意味着我必须将脚本复制到我的所有文件夹中,并为每个文件夹运行一次(很痛苦!)。
我如何修改脚本以便可以从父文件夹找到并执行它并递归任何图像子文件夹,例如:
Folder (script is here)
SubFolder1 (images are here)
SubFolder2 (images are here)
SubFolder3 (images are here)
And results in:
Folder
SubFolder1\portrait (portrait images are moved here)
SubFolder2\portrait (portrait images are moved here)
SubFolder3\portrait (portrait images are moved here)
脚本:
Add-Type -AssemblyName System.Drawing
$ImageList = Get-ChildItem "*.jp*g"
$LandscapePath = ""
$PortraitPath = "portrait"
md portrait
Foreach($ImageFile in $ImageList)
{
#Get the image information
$image = New-Object System.Drawing.Bitmap $ImageFile.Fullname
#Get the image attributes
$ImageHeight = $image.Height
$ImageWidth = $image.Width
#Close the image
$image.Dispose()
If($ImageWidth -lt $ImageHeight)
{
Move-Item -LiteralPath $ImageFile.FullName -Destination $PortraitPath -Force
}
}
我试过
$ImageList = Get-ChildItem "*.jp*g" -Recurse
但最终将子文件夹中的所有图像放入了父文件夹中的肖像文件夹中......
谢谢
(初始脚本感谢https://powershelladministrator.com/2021/09/20/move-images-based-on-dimension/ 。)
您可以移动逻辑以
portrait
在循环内创建目录,然后可以添加-Recurse
到Get-ChildItem
遍历所有子目录,并且在循环内部可以加入文件的.DirectoryName
属性(获取文件父目录的绝对路径)来portrait
创建每个文件的目标路径: