Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Applescript 基于文件名将文件移动到文件夹/子文件夹中_Applescript - Fatal编程技术网

Applescript 基于文件名将文件移动到文件夹/子文件夹中

Applescript 基于文件名将文件移动到文件夹/子文件夹中,applescript,Applescript,希望有人能帮助我 首先,我的AppleScript技能几乎不存在 我得到了一些需要排序的文件,它们的格式如下。格式首先是设备名称,然后是运行编号和示例编号,然后是一些文本 示例文件:“UZLA 55879[05x13]九月校准运行.cdf”(文件格式不同) 需要将其移动到文件夹中:~/UZLA 55879(LCMS)/Run 5/ 设备名称是相当随机的,有时只是一个数字,有时是整个官方命名 主文件夹在设备名称后面的括号中有一个辅助项,该设备名称不在正在移动的文件名中。“[”和“(”之前的字符串

希望有人能帮助我

首先,我的AppleScript技能几乎不存在

我得到了一些需要排序的文件,它们的格式如下。格式首先是设备名称,然后是运行编号和示例编号,然后是一些文本

示例文件:“UZLA 55879[05x13]九月校准运行.cdf”(文件格式不同) 需要将其移动到文件夹中:~/UZLA 55879(LCMS)/Run 5/

  • 设备名称是相当随机的,有时只是一个数字,有时是整个官方命名
  • 主文件夹在设备名称后面的括号中有一个辅助项,该设备名称不在正在移动的文件名中。“[”和“(”之前的字符串不匹配,在主名称之后则不同
  • 子文件夹并不总是存在,当开始新的运行时,例如/run 6/文件夹可能不存在。它们的数字没有0填充
  • 所有文件都到达同一文件夹,并且它们的文件不应位于该文件夹中的其他文件
为了解决这个问题,我们希望在主驱动器上的单个文件夹中创建一个别名(文件被移动到外部系统),以便直接访问,这很容易进行快速的最后查找,但对于整个系统来说却非常笨拙(旧的别名会被其他脚本从中删除)

谢谢


好吧,这是令人恼火的结束,因为它只帮助我,而不是未来的随机人。为我寻求帮助是关键。这就是我们现在所处的位置,感谢adayzdone:

set myFolder to (choose folder)
tell application "System Events" to set folderName to myFolder's name
set {TID, text item delimiters} to {text item delimiters, {"(", ")"}}
set myText to text item 2 of folderName
set text item delimiters to TID

set myFiles to every paragraph of (do shell script "find " & quoted form of (POSIX path of myFolder) & " \\! -name \".*\" -type f")
repeat with aFile in myFiles
    set aFile to aFile as text
    tell application "Finder" to set fileName to name of (POSIX file aFile as alias)
    set newPath to "~/" & quoted form of (do shell script "echo " & quoted form of fileName & " | sed -e 's/\\[0/\\[/' -e 's/\\([^\\[]*\\)\\[\\([0-9]*\\)x[0-9]*\\].*/\\1(" & myText & ")\\/Run \\2\\//'") as text
    do shell script "mkdir -p " & newPath & " ; mv " & quoted form of aFile & space & newPath
end repeat
这会产生以下错误:错误“无法从“testFolder”的文本项2中获取\“testFolder\”编号-1728的文本项2”


让我澄清一下:我在一个名为/testFolder/(总是这样命名,所有文件都在这里输入)的文件夹中有一堆文件,我想要的是根据文件名以给定格式将文件移动到文件夹和子文件夹中

示例:文件:/UZLA 55879[01x05]XXX.cdf

  • 基本名称“UZLA 55879”,目标位置存在文件夹/UZLA 55879(LCMS)。(LCMS)与移动无关,只是文件夹名称上的额外垃圾,脚本应检测到文件夹存在(不管()“并将其用作目标。如果不存在具有该基本名称的文件夹,则可能会弹出一个错误或使整个脚本崩溃,这并不是真正的问题,因为新的基本名称很少创建,而且是手动命名的(而且是随机命名的)
  • 名称的第二部分是[01x05],第一部分是检测到的“01”(从其填充零处剥离),并移动到子文件夹/Run 1/(如果是“[05x07]则进入/Run 7/等)。文件名/扩展名的其余部分与移动无关


当前问题:脚本现在尝试从起始文件夹中提取信息以选择目标文件夹,起始文件夹(未)命名为/UZLA 55879(LCMS)/它使用该“LCMS”创建目标文件夹。(由于起始文件夹为1)未命名为该文件夹,因此无法创建该文件夹和2))。每个目标文件夹都有不同的项(虽然有些是相同的)在这些括号之间,所以这样命名起始文件夹是没有用的“因此,该字符串必须是由目标文件夹而不是起始文件夹定义的随机字符串。

除非用户付出一些努力,否则我通常不会回答这样的问题,但我对正则表达式非常着迷

set sourceFolder to "/Users/You/Desktop/testFolder"
set destFolder to "/Users/You/Desktop/testFolder2"

set myFiles to every paragraph of (do shell script "find " & quoted form of sourceFolder & " \\! -name \".*\" -type f")

repeat with aFile in myFiles
    set aFile to aFile as text
    tell application "Finder" to set fileName to name of (POSIX file aFile as alias)

    -- Find name of parent folder
    set parentName to do shell script "echo " & quoted form of fileName & " | sed 's/ \\[.*//'"
    tell application "System Events" to set parentFolder to POSIX path of (first folder of folder destFolder whose name starts with parentName)

    -- Extract the text between ( and ) 
    set myText to do shell script "echo " & quoted form of parentFolder & " | sed 's/.*(\\(.*\\)).*/\\1/'"

    set newPath to quoted form of (destFolder & "/" & (do shell script "echo " & quoted form of fileName & " | sed -e 's/\\[0/\\[/' -e 's/\\([^\\[]*\\)\\[\\([0-9]*\\)x[0-9]*\\].*/\\1(" & myText & ")\\/Run \\2\\//'") as text)

    do shell script "mkdir -p " & newPath & " ; mv " & quoted form of aFile & space & newPath
end repeat

这是一篇相当宽泛的文章,没有你尝试过的背景知识,也没有你发现自己陷入困境的地方。如果你能编辑你的问题来表明这一点,我们很乐意再次打开它。那么…对宽还是窄关闭?现在在主帖中被卡住了部分。非常感谢。但是,一些后续的问题,因为正则表达式看起来像魔术-有可能吗取消子文件夹名称中的零填充?文件名是零填充的,文件夹不是。-变量myText是硬编码的,实际上它是可变的,取决于文件夹。文件夹是基于主名称(括号前)检测的括号中的内容与移动无关。如果存在具有基本名称的文件夹,则不应创建新文件夹。-我以前尝试过对别名使用Automator操作,但从未对我起作用,对此有何想法?请发布主文件夹名称的示例。以下是文件夹名称/UZLA 55879(LCMS)//UZLA 65874(LCMS)的一些示例//氨基酸检测(HPAE)//有机酸紫外光谱(5589)//有机酸电导率(7758)//UZLA光谱仪(SPUV)/。谢谢。看看编辑的版本是否可以。啊,我想我找到了。新脚本使用了不可用的信息,目标文件夹中有不相关的信息,脚本现在尝试从不存在的开始文件夹中提取这些信息。有关详细信息,请参阅主帖子。