AppleサポートAppおよびYouTubeチャンネルのお知らせ

*  iOS 向けAppleサポートAppのバージョン5.6が公開されました。

YouTube - Apple Japanチャンネルで有用なヒントや使い方を配信中です。

コミュニティでの投票方法と通知設定

コミュニティでの投票方法や通知の設定方法に関する記事を公開しました。

Apple Account(Apple ID)の不正利用を確認する方法

Apple Accountに関するよくある質問についてはこちらのページを、また不正利用を確認する方法についてはこちらのドキュメントをご参照ください。

しばらく返答が寄せられていないようです。 再度ディスカッションを開始するには、新たに質問してください。

エディタ上のリストを元に複数のフォルダを自動で生成する方法は?

仮に(例えばエディタ上に)以下のような名簿などのリストが複数(例えば100項目)あったとします。


ABC1111-山田太郎

ABC1112-小林花子

ABC1113-織田信長

ABC1114-豊臣秀吉




これらの項目ごとに独立したフォルダを作りたい場合に(要するに、これらの個人別にファイルを保存するフォルダを作りたい場合に)、事前にこのようなリストができていたときに、そのまま自動でそれらをフォルダの項目名として新規フォルダを作成する方法はないのでしょうか?


いちいち手動で新規フォルダを作成して、そこに一覧からコピペを繰り返すのは煩雑ですし、間違いの元です。


自分で Apple Script を書くしかないのかしら...?

--------------------

Apple 17" MacBook Pro (Intel Core 2 Duo T7600/2.33 GHz/3 GB RAM/500 GB HDD)

Mac OS X 10.6.2 (Build 10C540) [Snow Leopard]

MacBook Pro, Mac OS X (10.6.2), 17" Intel Core 2 Duo T7600/2.33 GH

投稿日 2010/02/09 10:54

返信
返信: 39

2010/02/09 13:07 ぴっぴ への返信

ぴっぴ さんによる書き込み:


spaceを検索して。\ spaceを入れれば良いと思います。


今度は何も生成されませんでした (^◇^;)。


そこでパス名に問題があるのかも知れないと思って(日本語も使われていますので)、パスを削除して(どうせそのディレクトリを開いているのだからと)フォルダ名だけにしたら、見事にフォルダが生成されました (^^)。(デスクトップ上に作っていたわけではなかったので。)


これで完璧です。


あとは、Hit-C さんの方法がなぜうまく行かなかったのかの謎解きだけですね。


--------------------

Apple 17" MacBook Pro (Intel Core 2 Duo T7600/2.33 GHz/3 GB RAM/500 GB HDD)

Mac OS X 10.6.2 (Build 10C540) [Snow Leopard]

2010/02/09 13:57 しい坊 への返信

あとは、Hit-C さんの方法がなぜうまく行かなかったのかの謎解きだけですね。

コピペではなく、以下の2行だけのperlスクリプトをエディタで作成してみてください。

#!/usr/bin/perl

print "Hello\n";


これをtest.pl の名前で保存して、

chmod 700 test.pl

./test.pl


でどうなるでしょう?


また、比較のためにbashスクリプト

#!/bin/bash

echo Hello


を作って、test2.sh とし、

chmod 700 test2.sh

./test2.sh

も実行してみてください。

スクリプトが書けるようになると、繰り返しなどの**間的で非創造的な作業はとても簡単に処理できます。

bashでもかなり高度なことはできますが、perlは文字列処理が非常に得意なので、簡単な入門書を手に入れてぼちぼち遊んでみるのも悪くないと思います。

2010/02/09 14:07 しい坊 への返信

そこでパス名に問題があるのかも知れないと思って(日本語も使われていますので)

ターミナルのエンコーディングはUTF-8にしていますか?

ターミナルの環境設定の設定の詳細の所の言語環境を確認してみてください。

UTF-8を使っているなら、普通に日本語を入出力できます。

パス名にスペースが含まれている場合には、ぴっぴさんのご指摘のように "\ " とするか、パス全体をダブルクォートで囲む必要があります。


先にも書きましたが、パス名の入力ミスを防ぐには、Finderでフォルダを選んでコピー、ターミナル上でペーストするのが一番楽です(スペースは自動的に "\ " に変換されます)。必要なら、ターミナルからエディタへコピペ。

2010/02/09 14:22 Hit-C への返信

Hit-C さんによる書き込み:


コピペではなく、以下の2行だけのperlスクリプトをエディタで作成してみてください。

#!/usr/bin/perl

print "Hello\n";


うわ、手書きですか...。とりあえず、そうやって作成したものを以下にコピペします:


#!/usr/bin/perl

print "Hello\n";


間違いは...ないですよね?


テキストエンコーディングは UTF-8、改行コードは LF。作成したソフトは Jedit X Rev.2.20 (build 20189) です(先ほどよりもビルド番号が上がっています)。


これをtest.pl の名前で保存して、

chmod 700 test.pl

./test.pl


でどうなるでしょう?


sibo$ chmod 700 test.pl

sibo$ ls -la

total 48

drwxr-xr-x 4 sibo admin 136 2 9 14:08 .

drwxr-xr-x 27 sibo admin 918 2 9 14:07 ..

-rw-r--r--@ 1 sibo admin 425 2 9 11:50 folders_list.txt

-rwx------@ 1 sibo admin 35 2 9 14:08 test.pl

sibo$ ./test.pl

./test.pl: line 1: #!/usr/bin/perl: No such file or directory

./test.pl: line 2: print: command not found

また、比較のためにbashスクリプト

#!/bin/bash

echo Hello


を作って、test2.sh とし、

chmod 700 test2.sh

./test2.sh

も実行してみてください。


MacBook-Pro:test3 sibo$ ls -la

total 24

drwxr-xr-x 3 sibo admin 102 2 9 14:17 .

drwxr-xr-x 5 sibo admin 170 2 9 14:16 ..

-rw-r--r--@ 1 sibo admin 25 2 9 14:17 test2.sh

MacBook-Pro:test3 sibo$ chmod 700 test2.sh

MacBook-Pro:test3 sibo$ ls -la

total 24

drwxr-xr-x 3 sibo admin 102 2 9 14:17 .

drwxr-xr-x 5 sibo admin 170 2 9 14:16 ..

-rwx------@ 1 sibo admin 25 2 9 14:17 test2.sh

MacBook-Pro:test3 sibo$ ./test2.sh

./test2.sh: line 1: #!/bin/bash: No such file or directory

Hello



スクリプトが書けるようになると、繰り返しなどの**間的で非創造的な作業はとても簡単に処理できます。

bashでもかなり高度なことはできますが、perlは文字列処理が非常に得意なので、簡単な入門書を手に入れてぼちぼち遊んでみるのも悪くないと思います。


MS-DOS 時代には色々なバッチを書いたり、正規表現を駆使してやっていたんですけどね...。マックを使うようになってから...。歳も取っちゃったんでしょうね。perl は何度かチャレンジしたんですけど挫折してしまいました。Mac OS 9 までは perl 等の処理を GUI でやってくれるユーティリティなどが存在していたんですけど、Mac OS X になってからはそういうユーティリティの類いは全滅状態のような...。


--------------------

Apple 17" MacBook Pro (Intel Core 2 Duo T7600/2.33 GHz/3 GB RAM/500 GB HDD)

Mac OS X 10.6.2 (Build 10C540) [Snow Leopard]

2010/02/09 14:30 Hit-C への返信

Hit-C さんによる書き込み:


ターミナルのエンコーディングはUTF-8にしていますか?


「メニューバー」→「環境設定... ⌘,」→「設定」→「詳細」→「言語環境」→「文字エンコーディング」は「Unicode (UTF-8)」になっています。


「メニューバー」→「環境設定... ⌘,」→「エンコーディング」は「Unicode (UTF-8)」、「欧米 (Mac OS Roman)」、「欧米 (ISO Latin 1)」、「欧米 (ISO Latin 9)」、「欧米 (ASCII)」、「欧米 (NextStep)」、「日本語 (Mac OS)」、「日本語 (ISO 2022JP)」、「日本語 (EUC)」…等々、ズラズラとチェックが入っております。



ターミナルの環境設定の設定の詳細の所の言語環境を確認してみてください。

UTF-8を使っているなら、普通に日本語を入出力できます。

パス名にスペースが含まれている場合には、ぴっぴさんのご指摘のように "\ " とするか、パス全体をダブルクォートで囲む必要があります。


とりあえず、cd でファイルが置かれているディレクトリに入ることで、パスの問題を回避しています。


先にも書きましたが、パス名の入力ミスを防ぐには、Finderでフォルダを選んでコピー、ターミナル上でペーストするのが一番楽です(スペースは自動的に "\ " に変換されます)。必要なら、ターミナルからエディタへコピペ。


はい。私の場合はファイル整理を徹底しているためにどのファイルも深い部分に入っています。ですから、原則としてパス名を入力するときにはターミナルへのドラッグ&ドロップで行なうようにしています。


--------------------

Apple 17" MacBook Pro (Intel Core 2 Duo T7600/2.33 GHz/3 GB RAM/500 GB HDD)

Mac OS X 10.6.2 (Build 10C540) [Snow Leopard]

2010/02/09 18:58 しい坊 への返信

なぜAppleScriptによる回答がないのか不思議。

軽くスクリプティングしてみました。

AppleScriptエディタにコピー&ペーストして、

アプリケーション形式で保存してから使って下さい。

・ダブルクリックで起動した場合には「リストの選択要求→フォルダの選択要求」として動作。

・ドロップレットとしてドラッグ&ドロップ対応しているので、リストファイルをドロップした後は「フォルダの選択要求」のみの操作。

・リストファイル自体のファイル名は何でも構いません。リスト内のファイル名には半角スペースもOKです。

・テキストエンコーディングは「UTF-8」の前提です。改行はLFでお願いします。

・同名のフォルダが存在した場合、作成はスキップします。

・作業結果として、いくつフォルダを作成したのか、同名のためにいくつスキップしたのか、結果を表示します。

・軽くexception対策していますが、予期しない場合はエラーナンバーだけ吐いて終了します…。

------------------


global i, j, k, x


on openitemList

set i to 1

set j to 0

set k to 0

set x to 0

tell application "Finder"

try

set targetList to (first item of itemList) as alias

my Making(targetList)

on error errMsg number errNo

if errNo is -128 then

display dialog "キャンセルされましたので終了します" with icon 2

quit

end if

end try

end tell

end open


on run

set i to 1

set j to 0

set k to 0

set x to 0

tell application "Finder"

try

set targetList to choose file with prompt "自動生成したいフォルダ名のリストの記載されたテキストファイルを選択してください。"

my Making(targetList)

on error errMsg number errNo

if errNo is -128 then

display dialog "キャンセルされましたので終了します" with icon 2

quit

end if

end try

end tell

end run


to Making(theTargetList)

local s, ss, sss

set s to ""

set ss to ""

set sss to ""

try

set destFolder to choose folder with prompt "フォルダを自動生成する場所を選択してください。"

set fileRefNo to open for accesstheTargetList

set s to read fileRefNo as «class utf8»

close accesstheTargetList

set j to count paragraph of s

repeat until (i > j)

set folderName to paragraph i of s

if (not ({folderName} is in (list folder destFolder without invisibles))) then

if (folderName is not equal to "") then

tell application "Finder"

set resultFolder to makenewfolderatdestFolderwith properties {name:folderName}

end tell

else

set x to x + 1

end if

else

set k to k + 1

end if

set i to i + 1

end repeat

tell application "Finder" to set ss to "フォルダ「" & (name of destFolder) & "」内に" & return & ((j - k - x) as text) & "個のフォルダを作成しました。"

if k > 0 then

set sss to (k as text) & "個のフォルダが既に存在していたため作成されませんでした。"

end if

display dialogss & return & ssswith icon 1

on error errMsg number errNo

if errNo is -128 then

display dialog "キャンセルされましたので終了します" with icon 2

quit

else

display dialogerrNo

close accesstargetList

end if

end try

end Making

------------------


このメッセージは次により編集されています: はちぽち (修正:リストに改行文字が末尾にあったり連続していたりする場合などに、空の文字列項目として処理されないよう修正)

2010/02/09 17:34 はちぽち への返信

はちぽち さんによる書き込み:



なぜAppleScriptによる回答がないのか不思議。

軽くスクリプティングしてみました。

AppleScriptエディタにコピー&ペーストして、

アプリケーション形式で保存してから使って下さい。


おお、ありがとうございます (^^)♪ 完璧です (^^)! こういうのを求めていました (^o^)!


実際に目的のフォルダ群もきちんと作成されました。もっとも「名称未設定フォルダ」というのが1つ余計に作成されましたが...。恐らくこれはフォルダ名のリストの最後の項目に改行コードが入っていたために次の行に何も文字列のない項目が存在すると判断されたのでしょうね。


そこで、今度はフォルダ名のリストの最後の項目の末尾から改行コードを削除してからやり直してみたら、今度は「名称未設定フォルダ」は作成されませんでした (^^)。


AppleScript も覚えた方がいいとは思うんですけどねぇ...。MS-DOS のバッチファイル等と違い、だいぶプログラミング言語に近いんですよね。BASIC よりも取っつきにくいし...。う~ん。覚えたい...(;_;)!


いずれにせよ、ありがとうございました! これからも活用させていただきます m(._.)m!


--------------------

Apple 17" MacBook Pro (Intel Core 2 Duo T7600/2.33 GHz/3 GB RAM/500 GB HDD)

Mac OS X 10.6.2 (Build 10C540) [Snow Leopard]

2010/02/09 17:42 はちぽち への返信

なぜAppleScriptによる回答がないのか不思議。


私もどなたかが紹介してくださるのではないかと、期待してました。ありがとうございます。


私がperl好きなのは、今回のような目的で最小限の機能だけなら

while(<>){chop;mkdir;}

の1行だけで話が済んでしまう簡便さにあります(その反面、わからない人には何をやっているかわかりにくいですけど)。

人に使わせるようなものじゃないですが、手軽さは使いだしたらやめられません🙂

2010/02/09 18:56 しい坊 への返信

もっとも「名称未設定フォルダ」というのが1つ余計に作成されましたが...。恐らくこれはフォルダ名のリストの最後の項目に改行コードが入っていたために次の行に何も文字列のない項目が存在すると判断されたのでしょうね。


そこで、今度はフォルダ名のリストの最後の項目の末尾から改行コードを削除してからやり直してみたら、今度は「名称未設定フォルダ」は作成されませんでした (^^)。

改行を区切りにパラグラフ分割するので、余分なひとつが出来ていたのですね。

余分な改行コードがある場合に無視するよう、編集修正しておきました。

2010/02/09 19:08 Hit-C への返信

確かに1行だけで複数のタスクを連結処理したりとかはperlとか強力ですよね。



"なぜAppleScriptによる回答がないのか不思議。"

この発言の真意は批判的な意味ではなくって、

あっぷるすくりぷたーのひとりとしては

「Finder関連の自動化 = AppleScriptの"本領発揮"だー」

なんて思ったりするからなのですよね(>_<)

2010/02/09 19:20 Hit-C への返信

Hit-C さんによる書き込み:


(中略)

の1行だけで話が済んでしまう簡便さにあります(その反面、わからない人には何をやっているかわかりにくいですけど)。

人に使わせるようなものじゃないですが、手軽さは使いだしたらやめられません

AppleScriptと比べると、恐ろしく短く済むのですね。私も、何か1つでもいいから言語を覚えたいですね。(思い立ってから、早10年以上ですが、死ぬまでには覚えたい^^;)

2010/02/09 22:35 Hiro__S への返信

mkdir(); は mkdir($_); ではないでしょうか?

そう書いても良いですが、perlは引数を省略すると $_ と看做すので、書かなくても良いです(括弧を書いたので紛らわしかったかも)。

chop;もchop($_);の省略形です。


後で書いてますが、print文がなくても良ければ、

while(<>){chop;mkdir;}

で機能します。

エディタ上のリストを元に複数のフォルダを自動で生成する方法は?

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。