我一直在尝试编写PowerShell脚本,将目录中的文件重命名为文件的“.LastWriteTime”属性。
我原本想要提取EXIF“Date Taken”日期,然后使用它,但我只想先尝试其余的自动化过程。此外,并非所有图片都有EXIF数据,因此使用.LastWriteTime是下一个最好的选择。
$pictures = Get-ChildItem -path $picsdir\* -Include "*.jpg" | Sort {$_.LastWriteTime}
foreach ($picture in $pictures)
{
$newfile = $picture.LastWriteTime | Get-Date -Format "yyyyMMdd-hhmmss"
If ($picture.FullName -eq! "$picture.DirectoryName\$newfile.jpg" -And! (Test-Path -Path "$newfile.jpg"))
{
Rename-Item $picture.FullName -NewName $newfile$format
}
}
问题是我认为我似乎无法在 If 语句中正确比较现有文件与当前文件之间的差异。我这样做是为了进一步为具有相同日期的图像创建逻辑。
我想,我试图使用当前文件的 $ picture.DirectoryName 来构建新文件的路径。
希望有人能提供帮助。
答案 0 :(得分:1)
"不等于" PowerShell中的运算符为-ne
(不是-eq!
)。
您不需要比较FullName
属性,您可以使用BaseName
属性(不带扩展名的文件名):
if($picture.BaseName -ne $newfile)
{
#Picture does not follow datetime naming
}
if语句的另一半也将失败,因为它将测试当前目录中的文件"$newfile.jpg"
,而不是图片所在的目录。您可以使用Join-Path
构建完整路径:
Test-Path -Path (Join-Path $picture.Directory.FullName -ChildPath "$newfile.jpg")
以类似的方式结束:
foreach ($picture in $pictures)
{
$newName = $picture.LastWriteTime | Get-Date -Format "yyyyMMdd-hhmmss"
$newFilePath = Join-Path $picture.Directory.FullName "$newName.jpg"
if ($picture.BaseName -ne $newName -and -not(Test-Path -Path $newFilePath))
{
Rename-Item $picture.FullName -NewName "$newName.jpg"
}
}