• ベストアンサー

apple scriptファイル名の一部のみ変更

apple scriptにおいて、ファイル名変更の自動化を試みています。 ファイル名にabcという文字が含まれる場合、それらをdefに 変更する、というようなことがしたいのですが、 (001abc.txt -> 001def.txt 003abc0.txt -> 003def0.txt) apple scriptにおいて set oldName to name of aObj --- newNameを指定 set name of aObj to newName の上記でoldNameからnewNameをどう得たらよろしいでしょうか?

  • Mac
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • sevenless
  • ベストアンサー率66% (374/561)
回答No.2

サブルーチンにしてください。例えば、 tell application "Finder" set oldName to "001abc.txt" set newName to my replace(oldName) end tell on replace(oldName) set oldDel to text item delimiters set text item delimiters to "abc" set myList to text items of oldName set text item delimiters to "def" set newName to myList as string set text item delimiters to oldDel return newName end replace といった具合。 あるいは、Finder で直接操作したいなら、text item delimiters を AppleScript's text item delimiters に置き換えてください。 tell application "Finder" set oldName to "001abc.txt" set oldDel to AppleScript's text item delimiters set AppleScript's text item delimiters to "abc" set myList to text items of oldName set AppleScript's text item delimiters to "def" set newName to myList as string set AppleScript's text item delimiters to oldDel end tell という具合。

flex1101
質問者

お礼

再度ありがとうございます。 AppleScript'sをつけると実行できました。希望の名前変更scriptが 実行できるようになりました。 ありがとうございました。

その他の回答 (1)

  • sevenless
  • ベストアンサー率66% (374/561)
回答No.1

set text item delimiters to "abc" set myList to text items of oldName set text item delimiters to "def" set newName to myList as string ということになるでしょうか。 テキストを一旦区切って再度繋げるという手法を取ります。 このままだとテキストの区切り文字が "def" になったままなので、 set oldDel to text item delimiters set text item delimiters to "abc" set myList to text items of oldName set text item delimiters to "def" set newName to myList as string set text item delimiters to oldDel という形で、区切り文字を元に戻しておいた方がいいかもしれません。 この程度なら大したことはないですが、AppleScript は文字列操作が得意とは言えないので、もっと複雑な操作をするなら perl などの方が向いているでしょう。

flex1101
質問者

お礼

早速の回答ありがとうございます。 参考にして勉強してみます。

flex1101
質問者

補足

set text item delimiters to "abc" において"Finderでエラーが起きました : text item delimitersを "abc"に設定できません。" というエラーが出てしまいます。 環境を下記忘れていたのですが、leopard上で作成しています。 apple scriptのバージョンによってうまくいかないのでしょうか?

関連するQ&A

  • ファイル名変更ができません

    こんにちは。Perl(超?)初心者です。 フォルダ内にあるファイルの名前を、「filename_ja.txt」という形式から「filename_en.txt」に変更するスクリプトを書こうとしているのですが、エラーになってうまくいきません。 環境は、Windows XP professional SP3とActivePerl 5.10 で、以下のように記述しました。 use strict; use warnings; my @filename = glob "*.txt"; foreach my $oldname(@filename) { my $newname = $oldname; $newname = ~s/(.+)_ja\.txt/$1_en\.txt/; rename ($oldname,$newname); } これを実行すると、「Use of uninitialized value $_ in substitution (s///) at test_5.pl line 8.」とエラーメッセージが出て、フォルダ内のテキストファイルが消失してしまいます。 また、以下のようにも書いてみたのですが、やはりうまくいきません。 この場合は、エラーこそ出ないものの、なにも起こりません。 use strict; use warnings; for(<\.txt>) { my $old=$_; s/(.+)_ja\.txt/$1_en\.txt/; rename($old,$_); } 初歩的な質問で申し訳ありませんが、ダメな生徒にアドヴァイスを与えるつもりで、スクリプトを添削していただけるとありがたいです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • アップルスクリプトを教えてください。

    Internet Explorerから表示しているHPのアドレスとページタイトルを下記のアップルスクリプトで取得していました。 tell application "Internet Explorer 5.1" set infolist to GetWindowInfo of -1 end tell set urlinfo to first item of infolist set titleinfo to second item of infolist 同じ情報をSafariから取得するためにはアップルスクリプトをどう変えたらいいかがわかりません。 ご指導よろしくお願いいたします。 ちなみに私はアップルスクリプトをほとんど理解していません。

    • ベストアンサー
    • Mac
  • C言語を使用し、同じ内容のファイルを増やす

    始めまして、ちょっと困っている事があります。 今現在Cで、あるプログラムを作ってます。 さて困っている内容ですが、testと記述されているテキストファイルを増やす所で困ってます。 「test」と記述されている「test.txt」を記述内容は同じで 「test01.txt」「test.02.txt」「test03.txt」・・・ と増やすにはどのようにプログラムを書けば宜しいでしょうか? *因みに、こちらが作成してみたプログラムです。 renameを使用して元のファイルを変えていく感じでやっていましたが・・ #include <stdio.h> #define MANGA 10 /*int main(void) { char oldname[256] = "bace00.html", newname[256] = "bace01.html"; FILE *fp; int i,a; printf( "%s\n", newname ); for( a = 0; a < MANGA; a++ ){ printf( "%d",a ); printf( "%s\n", newname ); rename(newname, "bace02.html"); printf( "%sあああ\n", newname ); //rename(oldname, newname) //newname[256] = "bace"; for( i = 0; i < MANGA; i++ ){ fp = fopen( "bace00.html","w" ); fprintf( fp, "<html>\n<title>%s</title>\n<head>\n</head>\n</html>\n" ); fclose( fp ); */ /* ファイル名の変更 */ /* if (rename(oldname, newname) == 0){ printf("%s のファイル名を %s に変更しました。\n", oldname, newname); }else{ perror("rename error"); } } } return 0; }*/

  • appleスクリプト

    Acrobat6.0の指定のプリントプリセットを指定して自動的にプリントアウトをしたいのですが、appleスクリプトで可能でしょうか? プリントアウトまでは出来たのですが、プリセットの指定が出来ません。 宜しくお願いします。

    • ベストアンサー
    • Mac
  • OSXのアップルスクリプトでのフォルダーの扱い方

    アップルスクリプトでドロップレットを作成し、 フォルダをドロップした時にフォルダの中のアイテムの名前を変更したいとします。 repeatでループを回そうとして、例えば on open Dropped tell application "finder" activate repeat with myFile in Dropped set name of myFile to name of myFile & ".jpg" end repeat end tell end open としても フォルダの中身がDroppedに入りません。 OS9.xの時はこれで大丈夫だったのですが。 フォルダの中身の参照(?)を取る時はどうすればよいのでしょう? 色んなMLの過去ログを調べましたがどうもOSXでの アップルスクリプトの記事が無く困ってます。 どうかご教授ください。 環境は iMac SlotLoading OS10.1.5 メモリ768Mです。

    • ベストアンサー
    • Mac
  • ファイル名変更(フォルダ名を前置きする)

    複数のフォルダにあるファイルのファイル名を、そのフォルダ名を前置きしたファイル名にリネームする方法はありませんか。 OSは7で、コマンドプロンプトからrenコマンドでできないか試したのですが思うようになりません。 行いたい作業例ですが、 ABCというフォルダ内にファイルがある場合、 1)001.txt → ABC001-00.txt 2)001-1.txt → ABC001-01.txt 3)001-11.txt → ABC001-11.txt 4)001-A.txt → ABC001-A.txt にしたいです。 1)~4)はルールことに分けて作業でもいいのですが、フォルダは複数あるため、一階層上から作業できる方がいいです。 AAAというフォルダ下に先のABCというフォルダ以外にDEFやGHIといったフォルダがあり、その下に001.txtや001-1.txtというフォルダがあるということです。 よろしくお願いします。

  • リストを読み込んでファイル名を書換るバッチファイル

    バッチファイル(test.bat)で、 変更前のファイル名が1行に1つずつ書かれたテキストファイル1(no1.txt)と 変更後のファイル名が1行に1つずつ書かれたテキストファイル2(no2.txt) を読み込んで、 no1.txtのn行目のファイル名のファイルを、 no2.txtのn行目のファイル名に書き換える バッチファイルを作りたいのですが、 (n=1,2,3,4…行数) どのように記述すればよいでしょうか。 具体的には、 フォルダAに 123.txt 456.txt 789.txt というファイルが入っていたとして、 no1.txtのファイルには、 123.txt 456.txt 789.txt no2.txtのファイルには、 ABC.txt DEF.txt GHI.txt が書かれていて、 test.batを実行すると、 フォルダAの中のファイル名が 123.txt => ABC.txt 456.txt => DEF.txt 789.txt => GHI.txt というようにリネームされるようにしたいです。 よろしくお願いします。(Windows10)

  • VBスクリプト:ファイル名をファイルに書く

    VBスクリプトで以下のようなコードを書いているのですが、上手く動いてくれません。あるディレクトリのファイル名をテキストファイルに書き込むという処理を行いたいのですが。。 配列は、ある順番(ファイル名順)のみ書き込むという処理を付け加えたいため必須です。アドバイスを頂けないでしょうか?宜しくお願い致します。 Set objFS = CreateObject("Scripting.FileSystemObject") Set fl = objFS.GetFolder("D:\") i = 0 For Each objFile In fl.Files str(i) = objFile.Name i = i + 1 Next Set objText = objFS.OpenTextFile("D:\filename.txt") For i = 0 To UBound(fl) objText.WriteLine fl(i) Next objText.Close

  • まとめてファイル名を変更したい

    あるフォルダに存在するファイル名に”RAWDATA"を含むテキストファイルを 任意のファイル名でCSVに変更したいのですが、 バッチファイルで set /p filename= rename d:\あるフォルダ\RAWDATA*.txt %filename%*.csv で簡単にできるかなと思ったのですが、 ”RAWDATA”の部分は入力した分しか変更されないようでした。 例えば”abc”と入力すると”abcDATA”となります。 入力したファイル名に置き換わるようにするには どのようにしたら良いのでしょうか? バッチ初心者ですがよろしくお願いします。

  • Apple Scriptでシステム環境設定の項目を変更したい

    Apple Scriptでシステム環境設定の項目を変更したい システム環境設定>スピーチ>音声認識のSpeakable Itemの入切の切り替えをキーボードショートカットで行いたいのですが、 キーボードショートカットの方はKeyboard Maestroなりを利用するとして、 システム環境設定のApple Scriptからのいじりかたが分かりません。 参考になる質問があるので(http://okwave.jp/qa/q5496340.html) 大体の方法は分かりましたが…… set current pane to pane "com.apple.preference.sound" のcom.apple.preference.~に何を入れれば良いのかが分かりません。 同様に、出てきたタブや項目名(slider 1など)も、指定の仕方は分かっても、どの項目がどれに相当するかが分かりません。 何か調べる方法があるのでしょうか? ぜひご教授ください。

    • ベストアンサー
    • Mac