搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  GetFileAndSubDirInfoInDir.txt
资料下载链接地址: https://bbs.pinggu.org/a-1506040.html
附件大小:
作用是取得一个文件夹下所有文件和文件夹的信息

  1. %macro GetFileAndSubDirInfoInDir(InDirPath,Filter,TargetTable,OutFilePath,Expand);
  2. /**********************************************************************/
  3. /* 此宏用于获得目标文件夹下所有文件及子文件夹的信息,并将此信息保存至 */
  4. /* SAS表格或导出至txt文件中。其中,InDirPath是指定的目标文件夹路径,*/
  5. /* 路径最后要加上\;Filter是文件过滤设置,支持*和?通配符,若需要导出*/
  6. /* 所有文件列表,可以设置为空;TargetTable是保存文件信息的SAS表格,若 */
  7. /* 不需要生成,可以设为空;OutFilePath是导出txt文件的路径,若不需要导 */
  8. /* 出,可以设为空;Expand是标记变量,=Yes表示展开所有文件夹,列表最后 */
  9. /* 包含文件及其所处文件夹信息,=NO表示只列出目标文件夹下第一层文件和*/
  10. /* 文件夹的信息。 */
  11. /* */
  12. /* 最终得到的是含有目标文件夹下所有文件及子文件夹信息的SAS表格和存于*/
  13. /* 指定路径的txt文件。 */
  14. /* */
  15. /* 注意运行此宏可能会产生数量不等的错误信息,这是由于利用DIR命令得到*/
  16. /* 结果表格纵向格式不一致引起的,但不会影响结果的正确性。 */
  17. /* */
  18. /**********************************************************************/
  19. /* 确保InDirPath后接\符号 */
  20. %if %SYSFUNC(FIND(%SYSFUNC(REVERSE(&InDirPath)),\)) NE 1 %then %let InDirPath=&InDirPath.\;
  21. /* 关闭显示LOG信息 */
  22. options nosource nonotes errors=0;
  23. /* 第一步:首先将InDirPath文件夹下所有文件的信息导出至OutFilePath文件中 */
  24. /* 情形1:参数OutFilePath为完整文件路径情形 */
  25. %if %SYSFUNC(FIND(&OutFilePath,%STR(.))) NE 0 %then %do;
  26. /* 情形1-1:展开所有文件夹 */
  27. %if %UPCASE(&Expand) EQ YES %then %do;
  28. %ChkFile(&OutFilePath);
  29. options noxwait xsync;
  30. x "dir &InDirPath.&Filter /s /a > &OutFilePath";
  31. %end;
  32. /* 情形1-2:不展开文件夹,只包含第一层子文件夹和文件的信息 */
  33. %else %if %UPCASE(&Expand) EQ NO %then %do;
  34. %ChkFile(&OutFilePath);
  35. options noxwait xsync;
  36. x "dir &InDirPath.&Filter > &OutFilePath";
  37. %end;
  38. /* 情形1-3:错误输入Expand参数情形 */
  39. %else %do;
  40. %put ERROR: The last parameter should be Yes or No, case insensitive and without quotes.;
  41. %goto exit;
  42. %end;
  43. %end;
  44. /* 情形2:参数OutFilePath为空情形 */
  45. %else %if %UPCASE(&OutFilePath) EQ %STR() %then %do;
  46. /* 情形2-1:展开所有文件夹 */
  47. %if %UPCASE(&Expand) EQ YES %then %do;
  48. options noxwait xsync;
  49. x "dir &InDirPath.&Filter /s /a > d:\GFASDIID_temp.txt";
  50. %let OutFilePath=d:\GFASDIID_temp.txt;
  51. %end;
  52. /* 情形2-2:不展开文件夹,只包含第一层子文件夹和文件的信息 */
  53. %else %if %UPCASE(&Expand) EQ NO %then %do;
  54. options noxwait xsync;
  55. x "dir &InDirPath.&Filter > d:\GFASDIID_temp.txt";
  56. %let OutFilePath=d:\GFASDIID_temp.txt;
  57. %end;
  58. /* 情形2-3:错误输入Expand参数情形 */
  59. %else %do;
  60. %put ERROR: The Expand should be Yes or No, case insensitive and without quotes.;
  61. %goto exit;
  62. %end;
  63. %end;
  64. /* 情形3:错误输入OutFilePath参数情形 */
  65. %else %do;
  66. %put ERROR: The OutFilePath should contain the full path of directory, including filename and filename extension.;
  67. %goto exit;
  68. %end;
  69. /* 第二步:接着将OutFilePath文件的信息导入SAS数据表中 */
  70. /* 需要生成SAS数据表情形 */
  71. %if %UPCASE(&TargetTable) NE %STR() %then %do;
  72. /* 情形1:展开所有文件夹,此时从第4行开始读 */
  73. %if %UPCASE(&Expand) EQ YES %then %do;
  74. data GFASDIID_temp;
  75. infile "&OutFilePath." firstobs=4 truncover;
  76. input DataString $ 1-100 @; /* 读取的第一个变量,变量长度为10,@表示光标不下移,继续读取此行 */
  77. input @1 Date YYMMDD10. @13 Time TIME. @19 Bytes_temp $17. @37 FileName $64.;
  78. if (FIND(DataString,'<DIR>') EQ 0) AND (FIND(DataString,'\') NE 0 OR Date NE .);
  79. format Date YYMMDD10. Time HHMM.;
  80. run;
  81. data &TargetTable(drop=DataString Bytes_temp);
  82. retain Date Time Bytes FileName DirPath;
  83. set GFASDIID_temp;
  84. Bytes=INPUT(Bytes_temp,COMMA17.);
  85. format Bytes COMMA17.;
  86. if FIND(DataString,'\') NE 0 then DirPath=COMPRESS(DataString,'的目录');
  87. if Date NE .;
  88. run;
  89. %end;
  90. /* 情形2:不展开文件夹,只包含第一层子文件夹和文件的信息,此时从第8行开始读 */
  91. %else %do;
  92. data GFASDIID_temp(drop=DataString);
  93. infile "&OutFilePath" firstobs=8 truncover;
  94. input DataString $ 1-10 @; /* 读取的第一个变量,变量长度为10,@表示光标不下移,继续读取此行 */
  95. input @1 Date YYMMDD10. @13 Time TIME. @19 Bytes_temp $17. @37 FileName $64.;
  96. if Date NE .;
  97. format Date YYMMDD10. Time HHMM.;
  98. run;
  99. data &TargetTable(drop=Bytes_temp);
  100. retain FileName Dir Bytes Date Time;
  101. set GFASDIID_temp;
  102. Bytes=INPUT(Bytes_temp,COMMA17.);
  103. format Bytes COMMA17.;
  104. if Bytes EQ . then Dir='<DIR>';
  105. else Dir='';
  106. run;
  107. %end;
  108. %end;
  109. /* 如需要在SAS的Output窗口中打印文件列表,请取消如下注释 */
  110. /*proc print data=&TargetTable;*/
  111. /*title1 "Files identified through saved file";*/
  112. /*run;*/
  113. /* 删除不必要的表格 */
  114. proc delete data=GFASDIID_temp;
  115. run;
  116. /* 恢复显示LOG信息 */
  117. options source notes errors=5;
  118. %if &OutFilePath=d:\GFASDIID_temp.txt %then x "erase d:\GFASDIID_temp.txt";
  119. %exit:
  120. %mend;

  121. %macro Demo();
  122. %let InDirPath=e:\Works\;
  123. %let Filter=*.sas;/* 文件过滤设置,若需要导出所有文件列表,则设置为空即可,即Filter=; */
  124. %let TargetTable=FileList;/* 若不需要生成包含文件列表的SAS表格,则设为空,大小写不敏感 */
  125. %let OutFilePath=;/* 若不需要导出文件列表txt文件,则设为空,大小写不敏感 */
  126. %let Expand=Yes;/* =Yes表示展开所有文件夹,列表最后包含文件及其所处文件夹信息,否则=No,大小写不敏感 */
  127. %GetFileAndSubDirInfoInDir(&InDirPath,&Filter,&TargetTable,&OutFilePath,&Expand);
  128. %mend;
复制代码



    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

GMT+8, 2026-1-1 03:50