4

ユーザーが1つのファイルを選択するapplescriptがあり、そのファイルの名前から拡張子を引いたものを取得する必要があります。

別のサイトで、これが機能するという投稿を見つけました。

tell application "Finder"
    set short_name to name of selected_file
end tell

ただし、拡張子も返します。ファイルの名前だけを取得するにはどうすればよいですか?

4

4 に答える 4

4

Finderまたはシステム イベント名前の拡張子を問い合わせて、その部分を完全な名前から削除することができます。これにより、名前にピリオドが含まれていたり、拡張子が思っていたものと異なる可能性があるという問題も回避できます。

set someItem to (choose file)

tell application "System Events" to tell disk item (someItem as text) to set {theName, theExtension} to {name, name extension}
if theExtension is not "" then set theName to text 1 thru -((count theExtension) + 2) of theName -- the name part

log theName & tab & theExtension
于 2012-07-26T00:25:44.647 に答える
2

これは、ピリオドを含むファイル名と拡張子を持たないファイル名 (両方ではない) で機能するはずです。複数の拡張子を持つファイルの最後の拡張子を返します。

tell application "Finder"
    set n to name of file "test.txt" of desktop
    set AppleScript's text item delimiters to "."
    if number of text items of n > 1 then
        set n to text items 1 thru -2 of n as text
    end if
    n
end tell

name extension複数の拡張子を持つファイルの最後の拡張子も返します。

tell application "Finder"
    name extension of file "archive.tar.gz" of desktop -- gz
end tell
于 2012-07-25T20:07:45.497 に答える
0

このスクリプトは、ASObjC Runner を使用してファイル パスを解析します。ASObjC Runner はこちらからダウンロード してください。

set aFile to choose file
tell application "ASObjC Runner" to set nameS to name stub of (parsed path of (aFile as text))
于 2012-07-25T21:14:24.627 に答える
0

ファイル名だけを取得するスクリプトは次のとおりです。

set filesFound to {}
set filesFound2 to {}
set nextItem to 1

tell application "Finder"
  set myFiles to name of every file of (path to desktop) --change path to whatever path you want   
end tell

--loop used for populating list filesFound with all filenames found (name + extension)
repeat with i in myFiles
  set end of filesFound to (item nextItem of myFiles)
  set nextItem to (nextItem + 1)
end repeat

set nextItem to 1 --reset counter to 1

--loop used for pulling each filename from list filesFound and then strip the extension   
--from filename and populate a new list called filesFound2
repeat with i in filesFound
  set myFile2 to item nextItem of filesFound
  set myFile3 to text 1 thru ((offset of "." in myFile2) - 1) of myFile2
  set end of filesFound2 to myFile3
  set nextItem to (nextItem + 1)
end repeat

return filesFound2
于 2012-07-25T18:45:02.063 に答える