无法将 JPG 文件上的 DateTaken 属性中的字符串转换为整数变量

2024-04-18

我有一个脚本,它使用 JPG 文件中的 EXIF 数据来查找DateTaken价值。找到后,将数据放入$Year and $Month变量。

$objShell  = New-Object -ComObject Shell.Application
$folders = (Get-ChildItem G:\ServerFolders\Photos\UnSorted\ -Directory -Recurse -force).FullName

foreach ($Folder in $folders) {
    $objfolder = $objShell.Namespace($folder)

    foreach ($file in $objFolder.Items()) {
        if ($objfolder.GetDetailsOf($file, 156) -eq ".jpg") {
            $yeartaken = ($objFolder.GetDetailsOf($File, 12)).Split("/")[2].Split(" ")[0]
            $month = $objFolder.GetDetailsOf($File, 12).Split("/")[1]
            $monthname = (Get-Culture).DateTimeFormat.GetMonthName($month)

            Write-Host $file.Name
        }
    }
}

因此,如果文件的 DateTaken 为 06/10/2016,$yeartaken is 2016 and $month is 10

然后我到Get-Culture将 10 转换为 10 月。这不起作用,因为它看到$month作为字符串。



Cannot convert argument "month", with value: "‎10", for "GetMonthName" to
type "System.Int32": "Cannot convert value "‎10" to type "System.Int32".
Error: "Input string was not in a correct format.""
At line:1 char:3
+   (Get-Culture).DateTimeFormat.GetMonthName($month)
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
  

我尝试使用转换或转换将其转换为整数值,但由于某种原因它不会转换。



PS> [int]$Test = $month

Cannot convert value "‎10" to type "System.Int32". Error: "Input string was
not in a correct format."
At line:1 char:1
+ [int]$Test = $month
+ ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
    + FullyQualifiedErrorId : RuntimeException
  

处理日期的更好方法是将日期字符串转换为实际的日期字符串DateTime对象,它提供您正在寻找的所有信息:

$culture = [Globalization.CultureInfo]::InvariantCulture
$pattern = 'dd\/MM\/yyyy'

$datestring = $objFolder.GetDetailsOf($File, 12).Split(' ')[0]
$datetaken  = [DateTime]::ParseExact($datestring, $pattern, $culture)

$year      = $datetaken.Year
$month     = $datetaken.Month              # month (numeric)
$monthname = $datetaken.ToString('MMMM')   # month name

假设日期后面跟着格式为时间HH:mm:ss您也可以扩展代码来处理时间:

$culture = [Globalization.CultureInfo]::InvariantCulture
$pattern = 'dd\/MM\/yyyy HH:mm:ss'

$datestring = $objFolder.GetDetailsOf($File, 12)
$timestamp  = [DateTime]::ParseExact($datestring, $pattern, $culture)

$year      = $timestamp.Year
$month     = $timestamp.Month              # month (numeric)
$monthname = $timestamp.ToString('MMMM')   # month name
$hour      = $timestamp.Hour
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法将 JPG 文件上的 DateTaken 属性中的字符串转换为整数变量 的相关文章

随机推荐