tq84_filesInDirectory(&dir)
returns a tq84_array that contains the names of the files and directories found in &dir
. %macro tq84_filesInDirectory(dir); %let filrf=tq84_dir; %let rc=%sysfunc(filename(filrf, &dir)); %if &rc ne 0 %then %do; %put filesInDirectory: filename statement - rc=&rc; /* 0 if successful */ %put %sysfunc(sysmsg()); %end; %local handle; %let handle=%sysfunc(dopen(&filrf)); %if &handle <= 0 %then %do; %put filesInDirectory location=&location, dopen returned &handle; %put %sysfunc(sysmsg()); %abort; %end; %local count; %let count=%sysfunc(dnum(&handle)); %local ret; %let ret = %tq84_array(); %do i=1 %to &count; %local fname; %let fname= %sysfunc(dread(&handle, &i)); %tq84_arrayPushBack(&ret, &fname) %end; %let rc = %sysfunc(dclose(&handle)); %if &rc ne 0 %then %do; %put filesInDirectory: dclose rc = &rc; %put %sysfunc(sysmsg()); %end; %let rc=%sysfunc(filename(filrf)); /* Corresponds to > filename filrf clear < */ %if &rc ne 0 %then %do; %put filesInDirectory, filename filrf clear rc=&rc; %put %sysfunc(sysmsg()); %end; &ret %mend tq84_filesInDirectory;
%let files=%tq84_filesInDirectory(/home/tq84); /* tq84_filesInDirectory returns an array. So, we can iterate over it: */ %tq84_arrayApply(&files,%nrstr( %put file=&this; ))
%tq84_arrayApply(%tq84_filesInDirectory(&fromDir), %nrstr( %put file = &this; %put %sysfunc(rename( &fromDir/&this, &toDir/&this, file)); ))