winmacpath
IT関係のお仕事では、Windowsを使う人とMacを使う人が混在している場合がほとんどです。

そのような環境におけるチャットやメールで困るのがファイルサーバーアドレスの受け渡し。Windowsだと「\\Server\Share\File.doc」みたいなファイルをMacで開く場合「smb://Server/Share/」にアクセスしてからFile.docを開く必要があります。

ここでは、そんなアドレスをAppleScriptでチャチャっと変換するコードを紹介します。

まずは、クリップボードの内容を変換する方針でコードを作ってみました。


コード:
set adata to the clipboard

if "\\\\" is in adata then -- Win から Mac
	set bakas to AppleScript's text item delimiters
	set AppleScript's text item delimiters to "\\"
	set blist to every text item of adata
	set AppleScript's text item delimiters to "/"
	set adata to blist as text
	
	set AppleScript's text item delimiters to bakas
	set adata to "smb:" & adata
	set the clipboard to adata
else -- Mac から Win
	set bakas to AppleScript's text item delimiters
	set AppleScript's text item delimiters to "/"
	set blist to every text item of adata
	set AppleScript's text item delimiters to "\\"
	set adata to blist as text
	
	set AppleScript's text item delimiters to bakas
	
	
	if (text 1 thru 4 of adata) as text is "smb:" then
		set adata to text 5 thru end of adata
		
	end if
	set the clipboard to adata
end if
解説:
set adata to the clipboard

if "\\\\" is in data then
…
else
…
end if

「set adata to the clipboard」は adata という変数にクリップボードの中身を代入しています。Windowsのアドレスならば「\\Server\Share」が入っている場合を想定しています。

if 〜のところでは、Windows式表記の「\\」が含まれているかどうかでどっちの変換処理かを判定しています。完璧ではありませんが、ほぼこの方法で問題ないでしょう。
コードでは「\\\\」となっていますが、これはAppleScriptでは「\」を「\」でエスケープする必要があるため。
エスケープとは、文字上の特殊なコードではないことを明示する書き方です。例えば「\n」という文字は改行という意味になってしまいますので、改行ではなく「\n」を表示したい時に「\\n」と入力するのです。
…
	set bakas to AppleScript's text item delimiters
	set AppleScript's text item delimiters to "\\"
	set blist to every text item of adata
…

1行め「AppleScript's text item delimiters」が1つの意味を持ちます。「text item delimiters」でもOK。
テキストの区切り文字を格納している変数という理解でいいと思います。
これからこの値を変更するため、もともとの値を「set bakas to ...」によって bakas 変数にバックアップしています。
2行めで「AppleScript's text item delimiters」を「\」に変更しています。
区切り文字「\」に変更したことで3行めの「set blist to every text item of adata」は、adata の中身を「\」で区切ったリスト(配列)に変換するという意味を持ちます。
「\\Server\Share」ならば、「{"","","Server","Share"}」というデータがblistに入ることになります。
この「every 〜」という表現はAppleScriptでよく使います。すべての要素を取り出すイメージです
…
	set AppleScript's text item delimiters to "/"
	set adata to blist as text
…

1行めで「AppleScript's text item delimiters」を「/」に変更しています。
この状態で2行めの「set adata to blist as text」は「{"","","Server","Share"}」というデータを文字列に戻す処理なのですが、「/」が区切り文字になっているので、間に「/」が入った状態で文字列に戻ります。
よって、ここまで処理が終わるとadataは「//Server/Share」となっているわけです。
…
	set AppleScript's text item delimiters to bakas
	set adata to "smb:" & adata
	set the clipboard to adata
…

「set AppleScript's text item delimiters to bakas」は、最初に bakas にバックアップした「AppleScript's text item delimiters」の中身を現在の「AppleScript's text item delimiters」に戻しています。
こういう処理は必須ではありませんが、後でいろいろ困ることになるのでしっかり意識しておきましょう

「set adata to "smb:" & adata」は「smb:」という文字列をadataの先頭に追加しています。
これでadataは「smb://Server/Share」という文字列になりました。
あとは「set the clipboard to adata」でクリップボードにadataを戻しておしまい。

「else」以降は、「smb://Server/Share」を「\\Server\Share」に変換する処理です。