AppleScript读取包含文件名的文本文件,搜索每个文件名,如果找到文件则将其复制到文件夹中

时间:2013-04-01 07:45:37

标签: macos applescript finder

很抱歉在没有粘贴我的编码尝试的情况下提出问题,但我之前从未使用过AppleScript,而且我不知道如何做到这一点。我已经在网上发现了一些代码,它们执行了每一步的一小部分,但是我无法弄清楚如何做的一些关键部分。如果我能弄清楚它会节省很多时间。基本上我的问题是,客户端发送了数千张照片,所有照片都在多个子文件夹级别,以及包含大约300个文件名的Excel文档,我需要提取和使用。我可以将Excel文档中的文件名复制到纯文本文件中,可以是多行或逗号分隔。

所以这就是我需要做的事情:

  • 打开文件夹选择器对话框以选择目标文件夹
  • 打开文件选择器对话框以选择文本文件
  • 循环遍历文本文件的每一行(或逗号分隔值)
  • 获取该字符串并搜索包含字符串
  • 的文件名
  • 将第一个结果复制到一个文件夹中(比如桌面:找到照片)
  • 如果找不到与该字符串匹配的文件,则将搜索字符串添加到文本文件中(因此我可以将其通过电子邮件发送给客户端并要求他们将其发送给我)

如果您无法对整个过程进行编码,如果您可以帮我循环浏览文本文件,搜索文件名并将第一个结果复制到另一个文件夹,并将文件名添加到文本文件中找不到文件,然后我可以把它拼凑起来。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您可以尝试以下方式:

set newFolder to POSIX path of (path to desktop as text) & "Found Photos"
do shell script "mkdir -p " & quoted form of newFolder
set filePaths to paragraphs of (read (choose file with prompt "Select file list") as «class utf8»)
set fileFolder to POSIX path of (choose folder with prompt "Select folder containing files")

set foundFiles to {}
repeat with fileName in filePaths
    set fileName to (contents of fileName)
    set xxx to do shell script "find " & quoted form of fileFolder & " -name " & quoted form of fileName
    if xxx ≠ "" then
        tell application "System Events" to move file xxx to newFolder
        set end of foundFiles to fileName & return
    end if
end repeat

set foundFiles to (foundFiles as text)
do shell script "echo " & quoted form of foundFiles & " > " & quoted form of POSIX path of ((path to desktop as text) & "FoundFiles.txt")

答案 1 :(得分:2)

使用shell脚本可能更容易:

IFS=$'\n'
mkdir -p ~/Desktop/target/
for l in $(cat ~/Desktop/files.txt); do
    found=$(find ~/Documents/source -type f -name "*$l*")
    [[ -n $found ]] && cp $found ~/Desktop/target/ || echo "$l"
done