誰かが私を助けてくれることを願って、
まず第一に、私の AppleScript スキルはほとんど存在しません。
アーカイブ目的で、並べ替えが必要な次の形式のファイルを多数取得します。形式は、最初にデバイス名、その後に実行番号、サンプル番号、テキストが続きます。
サンプル ファイル: "UZLA 55879 [05x13] september cal run.cdf" (ファイル形式は異なります) 次のフォルダーに移動する必要があります: ~/UZLA 55879 (LCMS)/Run 5/
- デバイス名はかなりランダムで、数字だけの場合もあれば、正式な名前全体の場合もあります。
- メイン フォルダには、デバイス名の後に括弧で囲まれた 2 番目の項目がありますが、これは移動中のファイル名には含まれていません。"[" と "(" の前の文字列は一致しますが、メインの名前の後の文字列は異なります。
- サブフォルダーは常に存在するとは限りません。たとえば、新しい実行が開始されたときにフォルダー /Run 6/ が存在しない場合があります。数字に0のパディングはありません
- ファイルはすべて同じフォルダーに到着し、そのフォルダーに他のファイルがあってはなりません。
これをまとめるために、直接アクセスできるように、メイン ドライブ (ファイルは外部システムに移動されます) の 1 つのフォルダーにエイリアスを作成します。他のスクリプトによって削除されます)。
ありがとう。
さて、これは厄介なことに閉じられました。見た目は私だけを助け、未来からのランダムな人ではありません。私のために助けを得ることがポイントでした。adayzdone のおかげで、これが現在の状況です。
set myFolder to (choose folder)
tell application "System Events" to set folderName to myFolder's name
set {TID, text item delimiters} to {text item delimiters, {"(", ")"}}
set myText to text item 2 of folderName
set text item delimiters to TID
set myFiles to every paragraph of (do shell script "find " & quoted form of (POSIX path of myFolder) & " \\! -name \".*\" -type f")
repeat with aFile in myFiles
set aFile to aFile as text
tell application "Finder" to set fileName to name of (POSIX file aFile as alias)
set newPath to "~/" & quoted form of (do shell script "echo " & quoted form of fileName & " | sed -e 's/\\[0/\\[/' -e 's/\\([^\\[]*\\)\\[\\([0-9]*\\)x[0-9]*\\].*/\\1(" & myText & ")\\/Run \\2\\//'") as text
do shell script "mkdir -p " & newPath & " ; mv " & quoted form of aFile & space & newPath
end repeat
これにより、次のエラーが発生します: エラー「\"testFolder\" のテキスト項目 2 を取得できません。」「testFolder」のテキスト項目 2 から数値 -1728
明確にさせてください: /testFolder/ という名前のフォルダーにたくさんのファイルがあります (常にその名前が付けられ、すべてのファイルがここに入力されます) 必要なのは、ファイル名に基づいて特定の形式でファイルをフォルダーとサブフォルダーに移動することです。
例: ファイル: /UZLA 55879 [01x05] XXX.cdf
- ベース名「UZLA 55879」、移動先にフォルダ/UZLA 55879(LCMS)/が存在します。(LCMS) は移動とは関係ありません。フォルダー名に余分なジャンクが含まれているだけです。スクリプトは、フォルダーが存在することを検出する必要があります (() の間にジャンクが含まれているにもかかわらず)"、それを移動先として使用します。そのベースのフォルダーがない場合新しいベース名が作成されることはめったになく、とにかく手動で (そしてかなりランダムに) 名前が付けられるため、これは実際には問題ではありません。
- 名前の 2 番目の部分は [01x05] です。その最初の部分である "01" が検出され (パディング ゼロから取り除かれ)、サブフォルダー /Run 1/ に移動されます ("[05x07] の場合は /Run 7/ に移動します)。ファイル名/拡張子の残りの部分は、移動には関係ありません。
現在の問題: スクリプトは開始フォルダーから情報を取得して宛先フォルダーを選択しようとします。開始フォルダーの名前は (ではなく) /UZLA 55879 (LCMS)/ その「LCMS」を使用して宛先フォルダーを作成します。(開始フォルダーが1)その名前が付けられていないため、これはできません。2))すべての宛先フォルダーには、それらの括弧の間に異なるアイテム(一部は同じですが)があるため、開始フォルダーにそのような名前を付けることは役に立ちません。スクリプトはそのために「 & myText & 」を使用します。その文字列は、開始フォルダーではなく宛先フォルダーによって定義されるランダムな文字列でなければなりません。