我有一个宏,它遍历文件系统上的一组文件夹并删除.txt或.xml文件:
%macro delete_all_txt_files_in_folder(folder, type);
%macro dummy;
%mend dummy;
filename filelist "&folder";
data _null_;
dir_id = dopen('filelist');
total_members = dnum(dir_id);
if total_members = . then total_members = 0;
do i = 1 to total_members;
member_name = dread(dir_id,i);
if scan(lowcase(member_name),2,'.')='&type.' then do;
file_id = mopen(dir_id,member_name,'i',0);
if file_id > 0 then do;
freadrc = fread(file_id);
rc = fclose(file_id);
rc = filename('delete',member_name,,,'filelist');
rc = fdelete('delete');
end;
rc = fclose(file_id);
end;
end;
rc = dclose(dir_id);
run;
%mend;
%delete_all_txt_files_in_folder(&rback_4., txt);
%delete_all_txt_files_in_folder(&rback_5., xml);
%delete_all_txt_files_in_folder(&rback_6., txt);
%delete_all_txt_files_in_folder(&rback_7., txt);
...但是由于某种原因它不想删除.xml文件,我不确定为什么。 fdelete
可以删除哪些文件类型有限制?
谢谢
答案 0 :(得分:1)
宏表达式不在单引号内求值。 更改
'&type.'
到
"&type."
答案 1 :(得分:0)
宏变量不能用单引号引起来(除非使用例如%BQUOTE('&VAR')
)
if scan(lowcase(member_name),2,'.')='&type.' then do;
需要成为
if scan(lowcase(member_name),2,'.')="&type." then do;