2014-04-18 80 views
2

我需要從目錄中刪除所有文本文件。以下程序適用於列出的文件(例如:file.txt),但是當我嘗試使用* .txt時,它不起作用。我是否錯過了一些東西,或者有更好的方法來刪除目錄中的所有txt文件。SAS:刪除文件夾中的所有.txt文件

data _null_; 
     fname = "_files"; 
     rc = filename(fname,"&path\file.txt"); 
     if rc = 0 and fexist(fname) then   
     rc = fdelete(fname); 
     rc = filename(fname); 
    run; 

回答

1

您不能在fdelete中使用通配符。你要麼需要循環中的所有文件的目錄,也可以使用根據您的操作系統

x 'del &path.\*.txt'; 

或類似的x命令(但它是依賴於操作系統的,並要求XCMD許可。

這裏的循環:

%let path=d:\temp; 
filename filrf "&path."; 
data _null_; 
    did = dopen('filrf'); 
    memcount = dnum(did); 
    do while (memcount>0); 
    fname = dread(did,memcount); 
    if scan(lowcase(fname),2,'.')='txt' then do; 
     rcref = filename('fref',catx('\',"&path.",fname)); 
     rcdel = fdelete('fref'); 
    end; 
    memcount+-1; 
    end; 
    stop; 
run; 
+0

這是否可以在UNIX或PC SAS中使用? – Keni

+0

謝謝喬,我會試着循環播放這些文件。 – Sammy

+0

X將是操作系統特定的 - X在兩個版本中均可用,但它執行的是系統命令,所以顯然是'del'與'rm'。 fdelete方法應該與操作系統無關,但並不是所有的操作系​​統在FDELETE的工作方式上都有相同的工作方式 - 我不確定是在VAX還是某些情況下它們是相同的。 – Joe

2

如果你是宏..下面的代碼應該做同樣的粉絲

options mlogic; 
    %macro delete_all_txt_files_in_folder(folder); 
     filename filelist "&folder"; 
     data _null_; 
      dir_id = dopen('filelist'); 
      total_members = dnum(dir_id); 
      do i = 1 to total_members; 
      member_name = dread(dir_id,i); 
      if scan(lowcase(member_name),2,'.')='txt' 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(C:\try) 
+0

謝謝您的輸入。我一定會嘗試。 – Sammy

相關問題