自动删除旧的 SAS 临时文件
Automatically deleting old SAS temporary files
美好的一天,
普通的 SAS 作业会在我们的机器上定期触发。作业有时会失败并留下临时文件。 (存放在windows环境下C:\Users\\AppData\Local\Temp\SAS临时文件\。)
最终这些会堵塞机器。目前我们必须手动删除它们。我想知道 SAS 是否可以定期删除旧的(比如说一周以上)旧文件?安排独立清理工作是我正在寻找的。
我可以用其他方式来做到这一点,比如python脚本,但是单一的语言环境会带来管理层的祝福和仁慈。
编辑:路径名显示不正确
如果您想要一种仅基于 SAS 函数的跨平台方法,而不使用 OS 特定命令,那么这个答案是一个很好的起点:
您只需添加一两行代码即可遍历所有工作目录并删除所有文件。
这是调用 DOS forfiles
命令并删除每个匹配文件的宏。 pushd
允许它也适用于 UNC 路径。
%MACRO DELFILES(PATH,MASK,AGE) ;
%IF %SYSFUNC(fileexist(&PATH)) %THEN %DO ;
data _null_ ;
infile "pushd ""&PATH"" && forfiles /P ""."" /S /M &MASK /D -&AGE /C ""cmd /c del @path"" 2>nul" pipe truncover ;
input ;
put _INFILE_ ;
run ;
%END ;
%MEND ;
因此,使用您的示例:
/* Delete everything over 7 days old */
%DELFILES(C:\Users\&SYSUSERID\AppData\Local\Temp\SAS Temporary Files\,*,7) ;
您可以将它放在自动执行程序中,或者放在程序的开始或结束处。
美好的一天,
普通的 SAS 作业会在我们的机器上定期触发。作业有时会失败并留下临时文件。 (存放在windows环境下C:\Users\
最终这些会堵塞机器。目前我们必须手动删除它们。我想知道 SAS 是否可以定期删除旧的(比如说一周以上)旧文件?安排独立清理工作是我正在寻找的。
我可以用其他方式来做到这一点,比如python脚本,但是单一的语言环境会带来管理层的祝福和仁慈。
编辑:路径名显示不正确
如果您想要一种仅基于 SAS 函数的跨平台方法,而不使用 OS 特定命令,那么这个答案是一个很好的起点:
您只需添加一两行代码即可遍历所有工作目录并删除所有文件。
这是调用 DOS forfiles
命令并删除每个匹配文件的宏。 pushd
允许它也适用于 UNC 路径。
%MACRO DELFILES(PATH,MASK,AGE) ; %IF %SYSFUNC(fileexist(&PATH)) %THEN %DO ; data _null_ ; infile "pushd ""&PATH"" && forfiles /P ""."" /S /M &MASK /D -&AGE /C ""cmd /c del @path"" 2>nul" pipe truncover ; input ; put _INFILE_ ; run ; %END ; %MEND ;
因此,使用您的示例:
/* Delete everything over 7 days old */ %DELFILES(C:\Users\&SYSUSERID\AppData\Local\Temp\SAS Temporary Files\,*,7) ;
您可以将它放在自动执行程序中,或者放在程序的开始或结束处。