filename dirlist pipe 'dir "c:\temp\"However, under Windows 7, I am getting the following error message noted here:
Stderr output: There is not enough space on the disk. NOTE: 0 records were read from the infile DIR.Also, when code is sent to an IOM server that uses the FILENAME PIPE command, the code fails with ERROR: Access is denied or ERROR: Insufficient authorization. As a result, I wrote the below macro that utilizes SAS component language (SCL) functions to get around these restrictions.
%macro directorylisting ( path = , outdsn = dirlist , where = , after = 01Jan1960 ) ; data &outdsn. ( keep = filename fullfilename created modified bytes ) ; attrib dref length = $8 fref length = $8 folder length = $256 filename length = $128 label = 'Filename' fullfilename length = $256 label = 'Full Filename' created length = 8 label = 'Created' format = datetime19. modified length = 8 label = 'Modified' format = datetime19. bytes length = 8 label = 'Bytes' format = comma15. ; if fileexist( "&path." ) then do ; folder = ifc( substr( "&path.", lengthn( "&path." ), 1 ) = "\" , "&path.", cats( "&path.", "\" ) ) ; rc = filename( dref, folder ); did = dopen( dref ) ; dcount = dnum( did ) ; do i = 1 to dcount ; filename = dread( did, i ) ; if find( filename, "&where.", 'i' ) > 0 then do ; fullfilename = cats( folder, filename ) ; rc = filename( fref, fullfilename ) ; fid = fopen( fref ) ; modified = input( finfo( fid, 'Last Modified' ), anydtdtm. ) ; if datepart( modified ) >= "&after."d then do ; created = input( finfo( fid, 'Create Time' ), anydtdtm. ) ; bytes = input( finfo( fid, 'File Size (bytes)' ), 18. ) ; output ; end ; fid = fclose( fid ) ; rc = filename( fref, '' ) ; end ; end ; did = dclose( did ) ; rc = filename( dref, '' ) ; end ; else put "ERROR: The folder &path. does not exist." ; run ; %mend ;