语句将文件名与文件修改日期进行比较
问题描述:
我一直在尝试编写一个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
}
}
问题是,我想我不能似乎在如果声明正确地比较,现有的文件和当前文件之间的差异。我正在这样做,以进一步创建具有相同日期的图像的逻辑。
我被卡住了,我想,我正在试图构建新文件的路径,使用当前文件的$ picture.DirectoryName。
希望有人能帮忙。
答
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"
}
}
感谢,这是非常有用的。 – Kareem