2012-02-09 18 views
1

내가 Omnigraffle 전문 5.Omnigraffle에서 확장자없이 파일 이름을 얻는 방법은 무엇입니까?

tell application "OmniGraffle Professional 5" 
    set _document to front document 
    set _path to path of _document 

    -- Get filename without extension 
    tell application "Finder" 
     set {_filename, _extension, _ishidden} to the 
      {displayed_name, name_extension, extension_hidden} of the _path 
    end tell 
end tell 

이 현재 문서 파일의 확장자가없는 파일 이름을 얻으려고하는 것은 나에게 다음과 같은 오류를 제공합니다 : error "Can’t get displayed_name of \"/Users/ca/Downloads/Feb 8.graffle\"." number -1728 from displayed_name of "/Users/ca/Downloads/Feb 8.graffle".

관련 질문 및 페이지를 찾았지만 약간 분실되어 실제로 작동하지 않는 이유를 실제로 이해할 수 없습니다. 당신의 도움에 대한

감사합니다!

답변

2

다음으로 변경해야 할 것 :

tell application "OmniGraffle Professional 5" 
    set _document to front document 
    set _path to path of _document 

    -- Get filename without extension 
    tell application "Finder" 
    set {_filename, _extension, _ishidden} to the ¬ 
       {displayed name, name extension, extension hidden} ¬ 
       of ((the _path as POSIX file) as alias) 
    end tell 
    if (_extension ≠ missing value) then 
     set baseName to text 1 thru -((length of _extension) + 2) of _filename 
    end if 

end tell 

"앞 문서의 경로는"단지 일반 문자열 파일의 POSIX의 경로를 반환합니다. 항목에 대한 정보를 얻으려면 Finder는 해당 파일에 대한 별칭 참조를 원할 것입니다. 일반 문자열을 전달할 때 일반 문자열에 이러한 속성이 없으므로 오류가 발생합니다. 별칭을 얻으려면 먼저 일반 경로를 POSIX 파일로 강제 변환 한 다음 POSIX 파일을 별칭으로 강제 변환해야합니다.

다른 변수를 정의하지 않은 경우 {displayed_name, name_extension, extension_hidden}의 밑줄을 제거해야합니다. 당신이 왼쪽 그 밑줄로 "컴파일"코드에서 볼 때, 다음과 같은 이미지처럼 보이는 :

enter image description here

그래서, 애플 스크립트는 변수가 아닌 속성으로 displayed_name 해석된다. 이제는 속성의 스크립트 상단과 같이 변수를 다른 곳에 정의한 경우에는 괜찮습니다. 그러나 그렇지 않은 경우 Finder 항목의 속성 이름에 밑줄이 없으므로 밑줄을 제거해야합니다. 밑줄을 제거하면 색이 올바르게 나타납니다 (속성은 녹색이고 변수는 녹색 임). 즉 아직 확장하지 않고 당신에게 파일 이름을 제공하지 않습니다

enter image description here

참고. 뭔가 이유가 없습니다 POSIX의 경로에 강제 할 수있는 경우 - 나는 "별칭으로 POSIX 파일로"잘못 보이는

if (_extension ≠ missing value) then 
    set baseName to text 1 thru -((length of _extension) + 2) of _filename 
end if 
+0

고맙습니다. 이것은 정말 좋은 대답입니다. 당신의 설명에 감사드립니다. – charlax

1

먼저 대상으로하는 응용 프로그램의 속성에 올바른 레이블을 사용해야합니다.이 레이블은 응용 프로그램 스크립팅 사전에 있습니다. 다음 문제는 찾기OmniGraffle 문서의 경로를 반환 분명히 무엇이다, POSIX 경로에 대해 아무것도 모르는 것을, 그래서 당신은 찾기에 대해 알고 않는 무언가로 경로를 강요 할 필요가 별명과 같은.

tell application "Finder" 
    set {_filename, _extension, _ishidden} to the {displayed name, name extension, extension hidden} of (_path as POSIX file as alias) 
end tell 
+0

text n thru m를 사용하여 추가 라인에서했던 것처럼 그것을 얻으려면, 당신이 뭔가를해야 할 것 앨리어스에게 직접 강요 당해? 내가 놓친 게 있니? – nekomatic

+1

별명은 POSIX 경로 등록 정보를 가지고 있지만 실제로는 그 위치의 텍스트이기 때문에 별다른 방법으로 POSIX 경로에서 다시 변환 할 수 없습니다.이 경우에는 별칭으로 변환하지 않아도되지만 항목과 같은 추가 용어를 사용해야합니다. POSIX 파일은 구피로 작동하는 의사 클래스입니다. 별명은보다 보편적 인 파일 지정자 유형이므로 나중에 다른 문제가 발생하지 않도록 별명을 사용했습니다. –

관련 문제