windows 11 一次性大量修改照片名稱,透過 PowerShell 讀取照片 Exif 資訊 # Windows PowerShell
1. 首先將照片集中到統一的資料夾
2. 在同一個資料夾下,右鍵新增一個文字文件
3. 命名為 exif-datetaken,名字可以更改,後面會需要用到檔名
功能為取出照片 Exif 資訊 |
4. 將以下這一段程式碼,複製貼上到 .txt 檔,並且儲存,內容不需要另外做修改
function GetTakenData($image) {
try {
return $image.GetPropertyItem(36867).Value
}
catch {
return $null
}
}
[Reflection.Assembly]::LoadFile('C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Drawing.dll') | Out-Null
$image = New-Object System.Drawing.Bitmap -ArgumentList $file
try {
$takenData = GetTakenData($image)
if ($takenData -eq $null) {
return $null
}
$takenValue = [System.Text.Encoding]::Default.GetString($takenData, 0, $takenData.Length - 1)
$taken = [DateTime]::ParseExact($takenValue, 'yyyy:MM:dd HH:mm:ss', $null)
return $taken
}
finally {
$image.Dispose()
}
保存文件 .txt |
5. 將檔案重新命名,修改副檔名成 .ps1
如果只有修改成 .ps1 可能是錯誤的,需要確認副檔名是 .ps1,而不是 .ps1.txt
開啟顯示副檔名
修改副檔名
副檔名為 .ps1.txt 是錯誤的 |
成功後圖示會顯示不同
內容會顯示為 Windows PowerShell 指令碼
6. 接著要確認照片要怎麼命名
首先照片的命名格式為
第一種 : 鋼鐵人_yyyyMMdd-HHmmss.jpg 的格式
第二種 : 按照index順序累加的格式
20220319-100.jpg
20220319-101.jpg
做這一步之前需要開啟 開始畫面 搜尋 powershell
點選 Windows PowerShell ISE 顯示為藍色視窗
輸入 get-executionpolicy
如果顯示為 Restricted 那麼需要接著輸入
set-executionpolicy remotesigned
系統會詢問點選 "是" 即可
會跳出錯誤提示
可以再 開始 或 Windows Power Shell ISE(x86) 檔案位置,以系統管理員身分開啟檔案
以系統管理員身分執行後即可成功設定
修改檔名成功,後續該如何還原(此步驟等最後修改檔名完成後再做)
輸入 set-executionpolicy restricted
點選是就可以還原成最初的狀態 |
比較困難的部分
按住 Shift 點選右鍵,選擇在這裡開啟 PowerShell 視窗
7.1 第一種命名的方法
需要注意開啟 powershell 的路徑是照片資料夾的路徑,且步驟 5 產生的exif-datetaken.ps1檔案也在同一個路徑下
輸入
$date = (.\exif-datetaken.ps1 $_.FullName)
if ($date -eq $null) {
Write-Host $_.Name ' 錯誤:找不到拍攝日期資訊。'
return
}
$fileName = $date.ToString('鋼鐵人_yyyyMMdd-HHmmss') + '.jpg'
Rename-Item -Path $_.Name -NewName $fileName
}
*紅色的部分為步驟 5 產生的檔名
*藍色的部分為需要修改檔案的副檔名,如果是 .png 或 .jpg 需要對應修改
*綠色的部分可自行修改
如果跳出錯誤請重新確認步驟 6 是否設定正確,或藍色部分檔名是否有對應
修改完成會顯示相關資訊
已經按照時間修改成對應檔案名稱 |
7.2 第二種命名方法(按照index順序累加)
$date = (.\exif-datetaken.ps1 $_.FullName)
if ($date -eq $null) {
Write-Host $_.Name ' 錯誤:找不到拍攝日期資訊。'
return
}
$index = 100
do {
$fileName = $date.ToString('yyyyMMdd') + ('-{0:00}' -f $index++) + '.jpg'
} while (Test-Path -Path $fileName -PathType leaf)
Rename-Item -Path $_.Name -NewName $fileName
}
*紅色 index 的起始可以自行設定
*綠色的部分可自行修改
執行結果 |
修改結果 |
後記
如果這篇文章對於你有幫助,可以幫忙分享給更多的人.文章內容如果有誤,可以在下方留言告知.本網站主要提供程式, 玩具相關資訊,可以訂閱獲得最即時的資訊.
留言
張貼留言