1

약 4000 개의 이미지 파일이있는 폴더가 있습니다. 이름이 엑셀 스프레드 시트에 나타나는지 여부에 따라 파일 중 일부를 선택하고 새 폴더에 복사해야합니다. 가능한 경우 원본 태그의 어떤 파일을 이동했는지, 어떤 파일을 이동하지 않았는지 알기 위해 해당 태그에 색상 태그를 붙이고 싶습니다. here에서 아래 코드를 얻었습니다.애플 스크립트를 사용하여 Excel 스프레드 시트에 나타나는 파일 이름 이동

tell application "Microsoft Excel" 
tell worksheet 1 of active workbook 
    set fileList to value of used range 
end tell 
end tell 

set rootFolder to "path/to/sourcefolder" as POSIX file 
set filesToMove to {} 
repeat with thisItem in fileList 
try 
    set end of filesToMove to alias (rootFolder & thisItem) 
on error 
    display dialog "File " & thisItem & " is not in the folder" 
end try 
end repeat 

tell application "Finder" 
move filesToMove to folder "path/to/destination" as POSIX file 
end tell 

실행할 때 파일을 찾을 수 없습니다. 문제는 : 대신 내 파일 경로에서 /을 사용하는 것과 관련이 있다고 생각되지만, AppleScript 구문으로 외장 드라이브에 대한 경로를 설정하는 방법을 모르겠습니다. 동일한 변수 선언을 사용하여 set rootFolder to "path/to/sourcefolder" as POSIX file을 입력 한 다음 파인더를 open rootFolder으로 알리는 것이 좋습니다.

또한 모든 파일에 동일한 명명 규칙이있는 것은 아니며 따라서 이름에 스프레드 시트의 식별자가 포함되어 있지만 정확히 일치하지 않는 파일을 검색해야합니다. I.E. 스프레드 시트 항목은 "00103"이지만 파일 이름은 "PX00103KL.jpg"입니다.

그동안 필자는 수동으로 검색 문자열을 입력 한 후에 만 ​​원하는 방식으로 파일을 이동하고 태그하는 자동화 워크 플로를 만들었습니다. 이 두 가지 아이디어를 결합하여 Excel 스프레드 시트 항목을 반복하고 자동화 워크 플로의 입력으로 차례대로 사용하는 것이 이상적입니다.

도움 주셔서 감사합니다.

+1

하나의 문제는 "POSIX 파일로"첫 번째 라인은 파일 스펙을 반환, 당신 루프에서 괄호 안에 사용하기 전에이를 문자열로 강제 변환해야합니다. 즉,'(rootFolder & thisItem)'은 {file "HD : path : you : want", "itemNumberWhatever"}와 같은 목록을 반환합니다. '((rootFolder as text) & thisItem)' – CRGreen

답변

0

Excel이 없지만 문자열 목록을 얻을 수 있다고 가정하면 여기에 문자열이 들어있는 대상 폴더의 모든 파일을 찾을 수있는 코드가 있습니다. 레이블을 설정하십시오 그것을 복사 한 다음 복사하십시오. 적절하게 변경하십시오.

유닉스 명령 줄 도구 인 mdlist을 사용하여 파일을 찾습니다. 순전히 애플 스크립트로 처리하려고하면 고통 스러울 것 같습니다.

여기 mdfind -onlyin ~/Documents/ "kMDItemDisplayName == '*somestring*'"

코드입니다 : 함께 스티치 쉘 명령은이 같은 것입니다

set stringList to {"144", "g_"} 

set rootFolder to "/Users/blah/Downloads/" as POSIX file 
set destFolder to "/Users/blah/Downloads/test" as POSIX file 
set filesToMove to {} 

set mdAtr to "\"kMDItemDisplayName == '*" 

repeat with thisItem in stringList 
    set sPath to quoted form of POSIX path of rootFolder 
    set sName to mdAtr & thisItem & "*'\"" 
    set sCmd to "mdfind -onlyin " & sPath & " " & sName 

    set sResults to (do shell script sCmd) 

    set fList to (every paragraph of sResults) as list 

    repeat with i in fList 
     set f to (POSIX file i) as alias 
     tell application "Finder" 
      set label index of f to 3 
      #copy file f to folder (destFolder as alias) 
     end tell 
    end repeat 
end repeat 
+0

이것은 꽤 잘 작동하고 있지만, mdfind 쉘 명령어로는 꺼져 있습니다. 주어진 문자열의 모든 인스턴스를 가져 오지 않습니다. 마지막 인용문을 제대로 벗어나지 못했을 수 있습니다. 다음은 콘솔에서 실행되는 스크립트입니다 :'do shell script "mdfind -onlyin '/ Volumes/destination/folder'\"kMDItemDisplayName == '* ZJ089 *'\ "" – Deimyts

+0

참고 : 문제 문자열은 다음과 같은 결과를 반환하지 않습니다. Finder/Spotlight를 사용하여 검색 중이지만 검색중인 파일에서 파일을 볼 수는 있어도 주목할만한 문제 일 수 있습니다. – Deimyts

+0

스포트라이트 문제 : 미리보기에서 모든 파일을 열었으므로 mdfind 명령을 사용하여 볼 수 있습니다. – Deimyts