File 用于解析名称和创建文件的Apple脚本

File 用于解析名称和创建文件的Apple脚本,file,applescript,osx-yosemite,create-directory,File,Applescript,Osx Yosemite,Create Directory,我是一名医生,正在尝试以以下格式解析从Filemaker Pro创建的文件:CCDOC | FamID | PtID | DocType | Date | FileExtension 在哪里 CCDOC是识别临床护理文件的前缀 FamID是家庭ID PtID是患者ID 文件类型(放射学、实验室、咨询等) 日期(格式为mm\U dd\U yyy) 扩展(主要是PDF,但也有一些JPG等) 我想制作一个苹果脚本,根据这些类型创建嵌套文件夹(家庭文件夹包含该家庭中的患者文件夹,其中包含不同的文档类

我是一名医生,正在尝试以以下格式解析从Filemaker Pro创建的文件:CCDOC | FamID | PtID | DocType | Date | FileExtension 在哪里

  • CCDOC是识别临床护理文件的前缀
  • FamID是家庭ID
  • PtID是患者ID
  • 文件类型(放射学、实验室、咨询等)
  • 日期(格式为mm\U dd\U yyy)
  • 扩展(主要是PDF,但也有一些JPG等)
我想制作一个苹果脚本,根据这些类型创建嵌套文件夹(家庭文件夹包含该家庭中的患者文件夹,其中包含不同的文档类型,等等)。然后文件将被移动到该文件夹中

你能帮我吗

这是文件格式的图像

这是创建它们的CSV文件


只需输入根文件夹的路径,即您希望文件夹所在的位置。祝你好运

set rootFolder to path to desktop

set tempVar to display dialog "Enter the following information separated by \"/\"" & return & "CCDOC/FamID/PtID/DocType/Date/FileExtension" default answer ""
set folderPath to text returned of tempVar

set thePath to POSIX path of rootFolder & folderPath
do shell script "mkdir -p " & quoted form of thePath

更新的答案

根据我到目前为止收集到的信息,这是目前我能为您提供的最新信息。它的评论非常好,所以你可以看到它在做什么。加上一个例子,我可能会让你更进一步

#!/bin/bash
#
# Go to the Desktop, or wherever the CSV file is and the output tree must be made
cd ~/Desktop || exit

# Parse "data.csv" using "|" as field separator
awk -F'|' '
  {
     # Pick up all fields of record into appropriately named variables
     CCDOC=$1; FamID=$2; PtID=$3; DocType=$4; Date=$5; Ext=$6;

     # Output name of directory to create, surrounded by "" to permit spaces, e.g. "Lab Test"
     print "\"ROOT/" FamID "/" PtID "/" DocType "/" Date "\""

   }' data.csv | xargs mkdir -p
给定一个
data.csv
文件,如下所示:

CCDOC|F999|P5678|Consult|02-03-2013|PDF
CCDOC|F7777|P1111|Radiology|03-04-1999|JPG
CCDOC|F999|P4321|Lab Test|06-12-1997|PDF
您将获得以下信息:

原始答案

本质上,您的问题的答案是在shell中使用
mkdir-p
命令生成一个目录,包括任何必要的中间目录,而不必抱怨任何已经存在或不存在的目录。你自己试试吧,把这个贴到终端上

mkdir -p ~/Desktop/Freddy/Frog/on/a/log
你会在桌面上看到这个

现在,问题是是否使用Applescript解析Filemaker Pro CSV文件。就我个人而言,我觉得Applescript太过冗长,令人难以置信,以至于难以理解,我会在一周中的每一天都使用straight
bash
。。。别忘了,只需使用

do shell script xyz
举个小例子,假设您将以下内容保存为桌面上的示例文件,并将其命名为
data.csv
。注:F999家族中有两名患者(
P5678
P4321

CCDOC|F999|P5678|Consult|02-03-2013|PDF
CCDOC|F7777|P1111|Radiology|03-04-1999|JPG
CCDOC|F999|P4321|Lab|06-12-1997|PDF
然后,您可以将以下一行粘贴到终端中

cd ~/Desktop &&  awk -F'|' '{print "ROOT/" $2 "/" $3}' data.csv | xargs mkdir -p
最后你会做以下的事情

让我解释一下脚本是如何工作的。首先,它将目录更改为您的桌面(
cd~/Desktop
),然后,如果工作正常(
&&
),它将启动
awk
,并告诉它每行上的字段都由竖条隔开(
awk-F'|'
)。然后awk将读取
data.csv
中的所有行,并拆分字段并为它们编号-因此
$1
将包含
CCDOC
$2
将包含
家庭ID
$3
将包含
PatientId
。因此,对于CSV文件中的每一行,我们都打印
ROOT/FamilyId/PatientId
。实际上,
awk
脚本的输出如下:

ROOT/F999/P5678
ROOT/F7777/P1111
ROOT/F999/P4321
但是,我们将这些行传递到
xargs
中,并告诉它在每一行上运行
mkdir-p
,因此它可以有效地执行此操作,这使得我在上面截取的文件夹

mkdir -p ROOT/F999/P5678
mkdir -p ROOT/F7777/P1111
mkdir -p ROOT/F999/P4321
如果您不想从终端执行此操作,而是想从Applescript执行此操作,则只需将相同的命令放入文件并调用它,例如
MarksThing

#!/bin/bash
cd ~/Desktop &&  awk -F'|' '{print "ROOT/" $2 "/" $3}' data.csv | xargs mkdir -p
然后在Applescript中,您可以

do shell script "MarksThing"
尽管您必须首先使用

chmod +x MarksThing

我知道这并不能完全回答你的问题,但我仍然不理解其余的问题。与其猜测和浪费大量时间,不如回答我的问题(在原始问题下方的
注释中),并告诉我您是否有兴趣继续此“非Applescript”在我做得太多之前,请先接近我。

我建议您查看FileMaker的AppleScript字典,尝试编写一个AppleScript,告诉FileMaker和Finder创建所需的文件和文件夹,而不是从FileMaker导出CSV,然后对其进行解析并从中创建文件。您可能会创建一个更简单、更易于编写和维护的脚本

如果您没有FileMaker的访问权限,您可能需要编写一个AppleScript,告诉Number和Finder创建文件和文件夹。数字可以为您读取CSV,Finder可以创建文件夹并移动文件。执行此操作的命令位于数字AppleScript字典和Finder AppleScript字典中,它们非常容易学习

例如,要使用Finder在桌面上创建根文件夹:

tell application "Finder"
    set theDesktopFolder to the path to the desktop folder as alias
    set theRootFolderName to "Patient Care"
    set theRootFolder to make new folder at theDesktopFolder with properties {name:theRootFolderName}
end tell
…然后,您可以告诉Number打开CSV并逐列、逐单元格循环,获取单元格值,并告诉Finder在RootFolder对象中创建相应的文件夹,该对象由上述脚本存储为变量,因此您只需说:

make new folder at theRootFolder with properties {name:theCellValue}
上面的脚本是故意用冗长的方式编写的,这样更容易阅读和理解。完成脚本后,您可以与其他人共享脚本,例如,他们可能必须将“患者护理”名称更改为“客户护理”或类似名称,这对于他们来说很容易在明确编写的AppleScript中完成,即使他们没有AppleScript技能。这是AppleScript的一个主要特性

您可以在中找到如何在AppleScript中执行重复循环。它还将向您展示如何打开要使用的应用程序的AppleScript字典,如数字和查找器

还请注意,shell脚本可能很危险。您可以用AppleScript无法实现的方式擦除数据。如果你搞砸了AppleScript,你会得到一个错误。如果你把bash搞砸了,你可以清除千兆字节的数据。很多关于堆栈溢出的人会回答你的AppleScript问题