powershell - 将 EXIF DateTaken 设置为文件创建时间

标签 powershell exif

我正在尝试使用 powershell 修复照片的元数据。 我需要将 exif DateTaken 设置为文件 CreationTime

这是我的代码:

[reflection.assembly]::loadfile( "C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll")
echo "--------"
echo ""
$files = Get-ChildItem E:\Photos\*.*
ForEach ($file in $files) {

        #Get Date
    $foo=New-Object -TypeName system.drawing.bitmap -ArgumentList $file.fullname 
    $date = $foo.GetPropertyItem(36867).value[0..9]
    $arYear = [Char]$date[0],[Char]$date[1],[Char]$date[2],[Char]$date[3]  
    $arMonth = [Char]$date[5],[Char]$date[6]  
    $arDay = [Char]$date[8],[Char]$date[9]  
    $strYear = [String]::Join('',$arYear)  
    $strMonth = [String]::Join('',$arMonth)   
    $strDay = [String]::Join('',$arDay)  
    $DateTaken = $strDay + "/" + $strMonth + "/" + $strYear


        # Get Time
    $time = $foo.GetPropertyItem(36867).value[11..18]
    $arHour = [Char]$time[0],[Char]$time[1]
    $arMinute = [Char]$time[3],[Char]$time[4]  
    $arSecond = [Char]$time[6],[Char]$time[7]  
    $strHour = [String]::Join('',$arHour)  
    $strMinute = [String]::Join('',$arMinute)   
    $strSecond = [String]::Join('',$arSecond)  
    $TimeTaken = $strHour + ":" + $strMinute + ":" + $strSecond

        # Link into one date and time
    $FullDate = $DateTaken + " " + $TimeTaken

    echo "File name"
    echo $file.name
    echo ""
    echo "Wrong data"
    echo (Get-Item $file).creationtime.datetime
    echo ""
    echo "Right data"
    echo $FullDate
    echo ""

        #Set DateTaken as CreationTime 
    (Get-Item $file).creationtime= $FullDate

    pause
}

我收到错误“无法访问该文件,因为它正在被另一个进程使用”。 我不知道如何解决它。

PS。我不确定 $FullDate 是否具有正确的语法,因为我无法测试它

谢谢

最佳答案

感谢@TomG,解决了我的问题 我已经完成了这个项目。我发布代码,这可能有助于将来修复照片中的日期的人

[reflection.assembly]::loadfile( "C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll")
Clear-Host
$files = Get-ChildItem E:\Photos\*.*
$i = 1
ForEach ($file in $files) {

        # Print file name
    echo $file.fullname 

        # Print Number of File
#   Write-Host 'File no: ' $i
#   echo ""

        #Get Date
    $foo=New-Object -TypeName system.drawing.bitmap -ArgumentList $file.fullname
    $date = $foo.GetPropertyItem(36867).value[0..9]
    $arYear = [Char]$date[0],[Char]$date[1],[Char]$date[2],[Char]$date[3]  
    $arMonth = [Char]$date[5],[Char]$date[6]  
    $arDay = [Char]$date[8],[Char]$date[9]  
    $strYear = [String]::Join('',$arYear)  
    $strMonth = [String]::Join('',$arMonth)   
    $strDay = [String]::Join('',$arDay)  

#       Date to string
#   $DateTaken = $strDay + "/" + $strMonth + "/" + $strYear


        # Get Time
    $time = $foo.GetPropertyItem(36867).value[11..18]
    $arHour = [Char]$time[0],[Char]$time[1]
    $arMinute = [Char]$time[3],[Char]$time[4]  
    $arSecond = [Char]$time[6],[Char]$time[7]  
    $strHour = [String]::Join('',$arHour)  
    $strMinute = [String]::Join('',$arMinute)   
    $strSecond = [String]::Join('',$arSecond)  

    $foo.dispose()

#       Time to string
#   $TimeTaken = $strHour + ":" + $strMinute + ":" + $strSecond

    $NewDate = (Get-Date -Year $strYear -Month $strMonth -Day $strDay -Hour $strHour -Minute $strMinute -Second $strSecond)

        #Set DateTaken as CreationTime 
    (Get-Item $file).CreationTime = $NewDate
    (Get-Item $file).LastWriteTime = $NewDate

    $i++

#   Clear-Host
}

echo ""
echo "Done"
pause

关于powershell - 将 EXIF DateTaken 设置为文件创建时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47685407/

相关文章:

powershell - 更正未传递给函数的参数值

windows - 使用powershell修改本地账户

python - 如何在 Python 中获取视频文件的方向

java - 如何将 Exif long/lat 转换为实际值?

ubuntu - 如何在ubuntu中根据文件名修改exif

python - 将 GPS 坐标从有理分数转换为度数

exif - 自定义 Exif 标签

powershell - 使用参数不在脚本文件中的Powershell

powershell - 如何防止 Powershell 脚本读取意外的输入

string - 如何在PowerShell函数中进行字符串替换?