« [System Events]起動項目を追加する | トップページ | [Bash版]macOS14でFinderでキーボードが受け付けなくなった場合用(openAndSavePanelServiceの強制終了 改良版のプロセス名変更 ) »

[リネーム] フォルダに内包されているファイルのファイルサイズを付与した名前にする(修正)

3GBを超えるとエラーになるのを修正した
あくまでも参考にしてください

【スクリプトエディタで開く】 |

サンプルソース(参考)
行番号ソース
001#!/usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003(*
004com.cocolog-nifty.quicktimer.icefloe
005*)
006----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
007use AppleScript version "2.8"
008use framework "Foundation"
009use framework "AppKit"
010use scripting additions
011
012property refMe : a reference to current application
013
014#【設定項目】基本名と日付部を区切る文字
015property strDemText : "@" as text
016
017###Wクリックで起動した場合
018on run
019  set aliasDefaultLocation to (path to desktop from user domain) as alias
020  set strPromptText to "フォルダをえらんでください"
021  set strMesText to "フォルダをえらんでください"
022  try
023    set listFolderPath to (choose folder strMesText with prompt strPromptText default location aliasDefaultLocation with multiple selections allowed, invisibles and showing package contents) as list
024  on error
025    log "エラーしました"
026    return "エラーしました"
027  end try
028  open listFolderPath
029end run
030
031###ドロップで起動した場合
032on open listFolderPath
033  ####################################
034  ####フォルタ以外は処理しない
035  repeat with itemFolderPath in listFolderPath
036    #パス
037    set aliasFolderPath to itemFolderPath as alias
038    set strDirPath to (POSIX path of aliasFolderPath) as text
039    set ocidDirPathStr to (refMe's NSString's stringWithString:(strDirPath))
040    set ocidDirPath to ocidDirPathStr's stringByStandardizingPath()
041    set ocidDirPathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidDirPath))
042    #フォルダ名
043    set ocidDirName to ocidDirPathURL's lastPathComponent()
044    #コンテナ
045    set ocidContainerDirPathURL to ocidDirPathURL's URLByDeletingLastPathComponent()
046    #コンテンツの収集の設定
047    #オプション:不可視ファイルを除外
048    set ocidOption to refMe's NSDirectoryEnumerationSkipsHiddenFiles
049    #プロパティ:ファイルサイズ
050    set ocidPropertieArray to (refMe's NSMutableArray's alloc()'s initWithCapacity:(0))
051    (ocidPropertieArray's addObject:(refMe's NSURLIsRegularFileKey))
052    (ocidPropertieArray's addObject:(refMe's NSURLFileSizeKey))
053    (ocidPropertieArray's addObject:(refMe's NSURLFileAllocatedSizeKey))
054    #コンテンツの収集実行
055    set appFileManager to refMe's NSFileManager's defaultManager()
056    set ocidEmuDict to (appFileManager's enumeratorAtURL:(ocidDirPathURL) includingPropertiesForKeys:(ocidPropertieArray) options:(ocidOption) errorHandler:(reference))
057    #コンテンツをリストに
058    set ocidEmuFileURLArray to ocidEmuDict's allObjects()
059    ########
060    #【1】ディレクトリを除外して単純に『ファイルだけ』のリストにする
061    set ocidFilePathURLAllArray to (refMe's NSMutableArray's alloc()'s initWithCapacity:0)
062    # set numTotalFileSize to 0 as integer
063    set ocidTotalFileSize to refMe's NSDecimalNumber's zero()
064    #ファイルサイズを収集して加算していく
065    repeat with itemFilePathURL in ocidEmuFileURLArray
066      set listResult to (itemFilePathURL's getResourceValue:(reference) forKey:(refMe's NSURLIsRegularFileKey) |error| :(reference))
067      set boolIsRegularFileKey to item 2 of listResult
068      if boolIsRegularFileKey is (refMe's NSNumber's numberWithBool:true) then
069        set listResult to (itemFilePathURL's getResourceValue:(reference) forKey:(refMe's NSURLFileSizeKey) |error| :(reference))
070        set strFileSize to (item 2 of listResult) as text
071        set ocidFileSize to (refMe's NSDecimalNumber's alloc()'s initWithString:(strFileSize))
072        set ocidTotalFileSize to (ocidTotalFileSize's decimalNumberByAdding:(ocidFileSize))
073      end if
074    end repeat
075    # バイト単位 10.5以前やWindowsターゲットの場合は1024に
076    set ocidByteUnits to (refMe's NSDecimalNumber's alloc()'s initWithString:("1000"))
077    #バイト計算の値 1000x1000 1000x1000x1000 1000x1000x1000x1000
078    set ocidKBUnits to (ocidByteUnits's decimalNumberByMultiplyingBy:(ocidByteUnits))
079    set ocidMBUnits to (ocidKBUnits's decimalNumberByMultiplyingBy:(ocidByteUnits))
080    set ocidGBUnits to (ocidMBUnits's decimalNumberByMultiplyingBy:(ocidByteUnits))
081    #比較を行う
082    set ocidBCompare to (ocidTotalFileSize's compare:(ocidByteUnits))
083    set ocidKBCompare to (ocidTotalFileSize's compare:(ocidKBUnits))
084    set ocidMBCompare to (ocidTotalFileSize's compare:(ocidMBUnits))
085    set ocidGBCompare to (ocidTotalFileSize's compare:(ocidGBUnits))
086    #ファイルサイズ四捨五入用のフォーマット
087    set ocidFormatter to refMe's NSNumberFormatter's alloc()'s init()
088    (ocidFormatter's setRoundingMode:(refMe's NSNumberFormatterRoundUp))
089    (ocidFormatter's setNumberStyle:(refMe's NSNumberFormatterDecimalStyle))
090    #ファイルサイズ格納用の可変テキスト
091    set ocidFileSizeStr to (refMe's NSMutableString's alloc()'s initWithCapacity:(0))
092    
093    #比較開始
094    if ocidBCompare = (refMe's NSOrderedAscending) then
095      log "B比較前方が小さい B単位"
096      (ocidFileSizeStr's setString:(ocidTotalFileSize's stringValue()))
097      (ocidFileSizeStr's appendString:("B"))
098      
099    else if ocidKBCompare = (refMe's NSOrderedAscending) then
100      log "KB比較前方が小さい KB単位"
101      set ocidTotalFileSize to (ocidTotalFileSize's decimalNumberByDividingBy:(ocidByteUnits))
102      (ocidFormatter's setMaximumFractionDigits:(0))
103      (ocidFileSizeStr's setString:(ocidFormatter's stringFromNumber:((ocidTotalFileSize))))
104      (ocidFileSizeStr's appendString:("KB"))
105      
106    else if ocidMBCompare = (refMe's NSOrderedAscending) then
107      log "MB比較前方が小さい MB単位"
108      set ocidTotalFileSize to (ocidTotalFileSize's decimalNumberByDividingBy:(ocidKBUnits))
109      (ocidFormatter's setMaximumFractionDigits:(1))
110      (ocidFileSizeStr's setString:(ocidFormatter's stringFromNumber:(ocidTotalFileSize)))
111      (ocidFileSizeStr's appendString:("MB"))
112      
113    else if ocidGBCompare = (refMe's NSOrderedSame) then
114      log "GB比較同数GB GB単位"
115      set ocidTotalFileSize to (ocidTotalFileSize's decimalNumberByDividingBy:(ocidMBUnits))
116      (ocidFormatter's setMaximumFractionDigits:(2))
117      (ocidFileSizeStr's setString:(ocidFormatter's stringFromNumber:(ocidTotalFileSize)))
118      (ocidFileSizeStr's appendString:("GB"))
119      
120    else if ocidGBCompare = (refMe's NSOrderedAscending) then
121      log "GB比較後方が小さいGB GB単位"
122      set ocidTotalFileSize to (ocidTotalFileSize's decimalNumberByDividingBy:(ocidMBUnits))
123      (ocidFormatter's setMaximumFractionDigits:(2))
124      (ocidFileSizeStr's setString:(ocidFormatter's stringFromNumber:(ocidTotalFileSize)))
125      (ocidFileSizeStr's appendString:("GB"))
126    end if
127    
128    if (ocidDirName as text) contains strDemText then
129      ###区切り文字でリストにして
130      set ocidDirNameArray to (ocidDirName's componentsSeparatedByString:(strDemText))
131      ###最後のアイテムを削除(旧日時)
132      ocidDirNameArray's removeLastObject()
133      ###テキストに戻す
134      set strDirName to (ocidDirNameArray's componentsJoinedByString:("")) as text
135    end if
136    #フォルダ名
137    set strDirName to (strDirName & "@" & ocidFileSizeStr) as text
138    #リネームURL
139    set ocidMoveDirPathURL to (ocidContainerDirPathURL's URLByAppendingPathComponent:(strDirName))
140    #リネーム
141    set listDone to (appFileManager's moveItemAtURL:(ocidDirPathURL) toURL:(ocidMoveDirPathURL) |error| :(reference))
142    if (item 2 of listDone) ≠ (missing value) then
143      log (item 2 of listDone)'s localizedDescription() as text
144      return "リネームに失敗しました"
145    end if
146    
147  end repeat
148end open
149
150
AppleScriptで生成しました

|

« [System Events]起動項目を追加する | トップページ | [Bash版]macOS14でFinderでキーボードが受け付けなくなった場合用(openAndSavePanelServiceの強制終了 改良版のプロセス名変更 ) »

AppleScript Folder」カテゴリの記事