1

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

所以这就是我需要做的:

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

如果您无法对整个过程进行编码,是否可以帮助我遍历文本文件,搜索文件名并将第一个结果复制到另一个文件夹,如果文件不是,则将文件名添加到文本文件中没找到,那我大概可以把它拼凑起来。谢谢你的帮助。

4

2 回答 2

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")
于 2013-04-01T11:44:08.313 回答
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
于 2013-04-01T16:22:18.290 回答