2016-01-20 66 views
0

我一直在嘗試編寫一個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

希望有人能幫忙。

回答

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" 
    } 
} 
+0

感謝,這是非常有用的。 – Kareem

相關問題