比较文件名和文件修改日期的语句
statement to compare file name to file modified date
我一直在尝试编写 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 构建新文件的路径。
希望有人能提供帮助。
PowerShell 中的 "not equals" 运算符是 -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"
}
}
我一直在尝试编写 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 构建新文件的路径。
希望有人能提供帮助。
PowerShell 中的 "not equals" 运算符是 -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"
}
}