我想用一个AppleScript改变数千个文件名。
文件名都是以这种方式制作的:
firstPart - secondPart XX.xxx
XX为某个数字,.xxx为jpg或png扩展名。
我想简单地更改周围的部分,以便它成为:
secondPart - firstPart XX.xxx
我想出了这个,但我的编码技巧让我失望。
tell application "Finder" to set aList to every file in folder "ImageRename"
set text item delimiters to {" - ", "."}
repeat with i from 1 to number of items in aList
set aFile to (item i of aList)
try
set fileName to name of aFile
set firstPart to text item 1 of fileName
set secondPart to text item 2 of fileName
set thirdPart to text item 3 of fileName
set newName to secondPart & " - " & firstPart & "." & thirdPart
set name of aFile to newName
end try
end repeat
这只适用于第二部分的数字。 所以它变成了:
SecondPart XX - firstPart.xxx
如何将两个整数作为文本项分隔符?
请帮助我并一路教我: - )
答案 0 :(得分:3)
回答你的问题如何使用整数作为文本项分隔符只是:
set AppleScript's text item delimiters to {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
您可以一次设置多个文本项分隔符,但问题是当使用多个文本项分隔符时,您实际上不知道两个文本项之间的内容。此外,使用文本项分隔符时,分隔符在文本中的显示顺序并不重要。因此,我建议使用正则表达式,您可以定义某种格式,而不是分隔字符串并猜测哪个字符实际上是分隔符。
tell application "Finder" to set aList to every file in folder "ImageRename"
repeat with i from 1 to number of items in aList
set aFile to item i of aList
set fileName to name of aFile as string
set newName to do shell script "perl -pe 's/^(.*) - (.*) ([0-9]{2}\\.(jpeg|png))$/\\2 - \\1 \\3/i' <<<" & quoted form of fileName
if newName is not fileName then set name of aFile to newName
end repeat
我使用perl
而非sed
的原因是因为perl
支持替换中的I标志,这使得表达式的比较不区分大小写。
修改(请求说明): 旧字符串的格式如下:字符串可以以任何字符(^。*)开头,直到文字字符串“ - ”( - ),然后再跟随任何字符(。*)。该字符串必须以一个以空格和2位数字开头的字符串结尾([0-9] {2}),后跟一个文字句点(\。),并以jpeg或png结尾((jpeg | png)$)。如果我们把这一切放在一起,我们得到一个像“^。* - 。* [0-9] {2} \。(jpeg | png)$”这样的正则表达式。但我们希望将匹配分组到不同的部分,并以不同的顺序将它们作为新字符串返回。因此,我们通过放置括号将正则表达式分为3个不同的子匹配:
^(.*) - (.*) ([0-9]{2}\.(jpeg|png))$
第一组将匹配firstPart,第二组将匹配secondPart,第三组(XX.xxx)将匹配剩余部分。我们唯一需要做的就是在返回新字符串时对它们进行重新排序。新字符串中的反斜杠后跟一个数字将被匹配组替换。在替换命令中,这将被标记为/ s / search / \ 2 - \ 1 \ 3 / flags。
我们替换的最后一部分是一些标志,我将I
作为不区分大小写匹配的标志。
把这一切放在一起让我
s/^(.*) - (.*) ([0-9]{2}\.(jpeg|png))$/\2 - \1 \3/I
注意:因为\在Apple脚本中是一个特殊字符,我们必须将\下写为\\
答案 1 :(得分:1)
只需使用空格作为分隔符并构建零件。 编辑:允许文本部分中的空格。
tell application "Finder" to set aList to every file in folder "ImageRename"
set AppleScript's text item delimiters to " "
repeat with i from 1 to number of items in aList
set aFile to (item i of aList)
try
set fileName to name of aFile
set lastParts to text item -1 of fileName
set wordParts to (text items 1 thru -2 of fileName) as string
set AppleScript's text item delimiters to " - "
set newName to {text item 2 of wordParts, "-", text item 1 of wordParts, lastParts}
set AppleScript's text item delimiters to " "
set name of aFile to (newName as string)
end try
end repeat
set AppleScript's text item delimiters to ""