1

我正在使用 ExifTool 将相机机身序列号更改为一组数百张图像中每个图像的唯一序列号。除了图像的序列号在 IPTC 中的位置之外,相机机身序列号被用作第二个位置,以放置序列号,因为它需要更多的努力才能删除。

序列号的格式为###-###-####-####,其中最后四位数字是要递增的数字。对于我运行的每个批次,前三组数字都不会改变。我只需要增加最后一组数字。

示例 如果我在第一批中有 100 张图像,它们将被编号:

811-010-5469-0001、811-010-5469-0002、811-010-5469-0003 ... 811-010-5469-0100

我可以成功地将一组图像拖到具有值的 ExifTool 快捷方式上

exiftool(-SerialNumber='001-001-0001-0001') 

并且它将更改图像上的 Exif 序列号标签,但尚未成功添加到此标签以使其为每个图像增加。

我尝试了以下变体但没有成功:

exiftool(-SerialNumber+=001-001-0001-0001)
exiftool(-SerialNumber+='001-001-0001-0001')

我意识到 ExifTool 很可能将这些视为在第一行中减去的数字,并将第二行视为字符串。我也试过:

exiftool(-SerialNumber+='1')
exiftool(-SerialNumber+=1)

只是想看看我是否可以让它增加一个基本的、个位数的数字。这也没有奏效。

也许这不能以这种方式增加,我需要从命令行使用 ExifTool。如果是这样,我正在学习命令行/powershell(Windows),但在这方面仍然很薄弱,如果这是我需要采取的路线,我将不胜感激。我不害怕使用命令行,只是需要更多的手握而不是正常的起点。我也在学习 Linux,可以从那里做这个项目,但同样,不害怕使用它,只是需要更多的手来完成它。

我用 PHP、JavaScript 和其他语言编写程序,所以代码对我来说并不陌生。只是为命令行编写它的经验。

如果需要进一步澄清,请在评论中告诉我。

感谢您的帮助和指导!

4

2 回答 2

1

如果我正确理解你的问题,这样的事情应该有效:

1..100 | % {
  $sn = '811-010-5469-{0:D4}' -f $_

  # apply $sn
}

或像这样(如果您遍历文件):

$i = 1
Get-ChildItem 'C:\some\folder' -File | % {
  $sn = '811-010-5469-{0:D4}' -f $i

  # update EXIF data of current file with $sn

  $i++
}
于 2015-06-15T22:55:52.933 回答
1

您可能不得不转到命令行而不是依赖拖放,因为此命令依赖于 ExifTool 的高级格式化。

Exiftool "-SerialNumber<001-001-0001-${filesequence;$_=sprintf('%04d', $_+1 )}" <FILE/DIR>

如果您想更通用并使用文件中的原始序列号,您可以使用

Exiftool "-SerialNumber<${SerialNumber}-${filesequence;$_=sprintf('%04d', $_+1 )}" <FILE/DIR>

这只会将文件计数添加到图像中当前序列号的末尾,但如果您在同一目录中有来自多个相机的图像,则可能会变得混乱。

至于使用命令行,您只需重命名以删除括号中的命令,然后将其移动到命令行路径中的某个位置或使用 ExifTool 的完整路径。

至于对您之前尝试的澄清,该+=选项与数字和列表一起使用。SerialNumber 标签通常是一个字符串,尽管这可能取决于它被写入的位置。

于 2015-06-16T02:36:21.967 回答