如何将当日日期用作文件路径?AppleScript创建文件夹遇问题求助
问题分析与修复方案
原代码核心问题
property误用:property是脚本编译时就固定的属性,你用运行时才计算的name1/name2拼接路径,导致Invoicefolder的值根本不是期望的动态年月路径。- 未处理父文件夹不存在的情况:如果「当年年份」「当月月份」文件夹还没创建,直接在其下建子文件夹会报错。
- 路径传递方式不够稳妥:直接传字符串路径给Finder,偶尔会因格式识别问题出故障。
修复后的代码
-- 获取当前日期并提取年月 set currentDate to current date set yearStr to (year of currentDate) as string -- 月份补零,确保是两位数字(比如1月变成"01") set monthNum to month of currentDate as integer set monthStr to text -2 thru -1 of ("0" & monthNum) -- 构建完整父路径 set basePath to "Macintosh HD:Users:Will:Invoices:" set yearFolderPath to basePath & yearStr & ":" set targetParentPath to yearFolderPath & monthStr & ":" tell application "Finder" -- 先检查年份文件夹是否存在,不存在则创建 if not (exists folder yearFolderPath) then make new folder at basePath with properties {name:yearStr} end if -- 再检查月份文件夹是否存在,不存在则创建 if not (exists folder targetParentPath) then make new folder at yearFolderPath with properties {name:monthStr} end if -- 最后在目标路径下创建新文件夹(处理重名情况) set newFolderName to "New Folder" set suffix to 1 repeat while exists folder (targetParentPath & newFolderName) set newFolderName to "New Folder " & suffix set suffix to suffix + 1 end repeat make new folder at targetParentPath with properties {name:newFolderName} end tell
关键优化点
- 直接通过
year of currentDate和month of currentDate获取年月,比解析ISO字符串更可靠,还自动处理月份补零。 - 递归创建年月文件夹,避免父文件夹不存在的错误。
- 增加重名判断,防止因目标文件夹已存在导致脚本崩溃。
- 去掉
property,改用运行时计算的变量,保证路径动态更新。
内容的提问来源于stack exchange,提问作者willy3oy
相关产品推荐
相关产品推荐

