1

アーティストが誤った名前を付けた画像の大きなリストがあります。Automator を使用して彼にこれ以上の仕事を与えないようにしたいと思っていましたが、私はそれが初めてです。今は what001a と what002a の順に名前が付けられていますが、これは what001a と what001b のはずです。したがって、基本的に奇数番号は A で、偶数番号は B です。したがって、偶数番号の画像を B 画像に変更し、それらすべてに適切な連続番号を付け直すスクリプトが必要です。そのスクリプトを書くにはどうすればよいですか?

画像一覧

4

2 に答える 2

2

AppleScript に埋め込まれた小さな Ruby スクリプトは、非常に快適なソリューションを提供します。名前を変更するファイルを Finder で直接選択し、有益な成功またはエラー メッセージを表示することができます。

このアルゴリズムは、次のようにファイルの名前を変更します。

number = first 3 digits in filename                # e.g. "006"
letter = the letter following those digits         # e.g. "a"
if number is even, change letter to its successor  # e.g. "b"
number = (number + 1)/2                            # 5 or 6 => 3
replace number and letter in filename

前後

そして、ここにあります:

-- ask for files
set filesToRename to choose file with prompt "Select the files to rename" with multiple selections allowed

-- prepare ruby command
set ruby_script to "ruby -e \"s=ARGV[0]; m=s.match(/(\\d{3})(\\w)/); n=m[1].to_i; a=m[2]; a.succ! if n.even?; r=sprintf('%03d',(n+1)/2)+a; puts s.sub(/\\d{3}\\w/,r);\" "


tell application "Finder"

    -- process files, record errors
    set counter to 0
    set errors to {}
    repeat with f in filesToRename
        try
            do shell script ruby_script & (f's name as text)
            set f's name to result
            set counter to counter + 1
        on error
            copy (f's name as text) to the end of errors
        end try
    end repeat

    -- display report
    set msg to (counter as text) & " files renamed successfully!\n"
    if errors is not {} then
        set AppleScript's text item delimiters to "\n"
        set msg to msg & "The following files could NOT be renamed:\n" & (errors as text)
        set AppleScript's text item delimiters to ""
    end if
    display dialog msg
end tell

ファイル名にスペースが含まれている失敗することに注意してください。

于 2012-04-18T19:03:37.920 に答える
1

私の友人は、私が必要とすることを行うために Python スクリプトを作成しました。助けを求めて同様の問題に出くわした人への回答として、ここに投稿すると思いました。ただし、Python で作成されているため、必要な人のために AppleScript に変換したい場合は、それを実行してください。

import os
import re
import shutil

def toInt(str):
  try:
    return int(str)
  except:
    return 0

filePath = "./"
extension = "png"

dirList = os.listdir(filePath)

regx = re.compile("[0-9]+a")

for filename in dirList:
  ext = filename[-len(extension):]
  if(ext != extension): continue
  rslts = regx.search(filename)
  if(rslts == None): continue
  pieces = regx.split(filename)
  if(len(pieces) < 2): pieces.append("")
  filenumber = toInt(rslts.group(0).rstrip("a"))
  newFileNum = (filenumber + 1) / 2
  fileChar = "b"
  if(filenumber % 2): fileChar = "a"
  newFileName = "%s%03d%s%s" % (pieces[0], newFileNum, fileChar, pieces[1])
  shutil.move("%s%s" % (filePath, filename), "%s%s" % (filePath, newFileName))
于 2012-04-18T20:28:12.683 に答える