2017-03-31 9 views
0

3レベルの深さのフォルダがあり、各レベルには十分な量のファイルが含まれています。私は下のスクリプトで2つのレベルを深めることができますが、3番目のレベルでは少し難題があります。どのように私は1つのレベルを深くすることになっているかについてのいくつかの指導を提供して気になるでしょうか?私がAppleScriptでどのように動作するかを調べようとしているので、Pythonや他の言語を使用することはできません。深いドリルを再帰的に処理する

set sourceFolder to (choose folder) 

tell application "Finder" 
    my changeFileNameCase(sourceFolder, "upper") 
    repeat with subFolder in (get every folder of folder sourceFolder) 
     my changeFileNameCase(subFolder as alias, "upper") 

     #This Is No Good 
     repeat with theFolder in (get every folder of folder subFolder) 
      my changeFileNameCase(theFolder, "upper") 
     end repeat 

    end repeat 
end tell 

on changeFileNameCase(targetFolder, caseToSwitchTo) 
    tell application "Finder" 
     set fileList to every file of folder targetFolder 
     repeat with theFile in fileList 
      set oldName to name of theFile 
      set newName to my changeCaseOfText(oldName, caseToSwitchTo) 
      set the name of theFile to newName 
     end repeat 
    end tell 
end changeFileNameCase 

答えて

2

ハンドラを再帰的にするには、フォルダのすべてのアイテムを取得し、各アイテムのクラスをチェックする必要があります。

  • クラスはクラスが

set sourceFolder to (choose folder) 
changeFileNameCase(sourceFolder, "upper") 

on changeFileNameCase(targetFolder, caseToSwitchTo) 
    tell application "Finder" 
     set theList to every item of targetFolder 
     repeat with i from 1 to count theList 
      set theItem to item i of theList 
      if class of theItem is folder then 
       my changeFileNameCase(theItem, caseToSwitchTo) 
      else 
       set oldName to name of theItem 
       set newName to my changeCaseOfText(oldName, caseToSwitchTo) 
       set name of theItem to newName 
      end if 
     end repeat 
    end tell 
end changeFileNameCase 
+0

ああその名前を変更fileある場合は、これを行っている場合は、私はほとんど見

  • フォルダを渡してハンドラを呼び出すfolderある場合しかし、それはtheItemがフォルダのように見えますが、これはフォルダの名前を変更します。ここではファイルの名前を変更するだけです。私はサブフォルダのリストを作成する必要があると仮定していますか? theItemがフォルダの場合 - サブフォルダのリストを作成しますか? – Jesse

  • +0

    いいえ、項目がフォルダの場合は、ハンドラを再帰的に呼び出します。レベルの数は関係ありません。 – vadian

    +0

    第2の見て、私はハンドラがそれ自身を呼び出すのを参照してください。いずれにせよ、自分自身を呼び出す際にエラーをスローするエラー "Finderにはエラーがあります:changeFileNameCaseを続行できません。"番号-1708私はこれを選ぶ時間を過ごすでしょう – Jesse

    関連する問題