數學好玩:一鍵生成文件夾中所有文件列表到Excel電子表格

有時候,我們可能需要將某一個文件夾下的所有文件名輸出為一個Excel電子表格,或者輸入到文檔中進行處理,除此之外,可能還需要文件的修改日期、文件大小等信息;更更重要的是,有時候除了當前文件夾下面的所有文件名稱之外,還希望一次性將它包含的所有子文件夾下的文件都列出來,並且有時候還僅僅希望列出指定文件類型,比如某些類型圖像文件名稱列出來,那麼該如何實現呢?


操作系統:Windows10

實驗環境:Mathematica11.2

方法一:文件比較少的情形

1、平鋪資源管理器窗口和數學軟件Mathematica窗口,如圖1. 按下鍵盤上的Windows圖標鍵,不鬆開按下向左、或向右方向鍵,可以快速平鋪這兩個已經打開的窗口。

2、在文件夾名稱上按下鼠標左鍵,拖動文件夾到Mathematica軟件窗口鬆開,會顯示處該文件夾,包括子文件中的所有包含後綴名的文件列表。

數學好玩:一鍵生成文件夾中所有文件列表到Excel電子表格

圖1 平鋪窗口

3、在出現的列表前面輸入a=,然後

按下【Shift】+【Enter】將文件名稱列表賦值給名稱為a的變量。

4、再在最下面的空白位置處單擊鼠標左鍵,輸入如下Mathematica表達式:

info=FileNameTake[#]&/@a;

Export["文件名稱列表.xls",info]

按下【Shift】+【Enter】執行,得到如下結果,如圖2.

數學好玩:一鍵生成文件夾中所有文件列表到Excel電子表格

圖2 文件名列表

5、點擊下面的“打開”,如圖3。打開生成的Excel文件,可以看到所有帶有後綴名的文件名稱列出在電子表格文件的第一列。

數學好玩:一鍵生成文件夾中所有文件列表到Excel電子表格

圖3 輸出結果與打開文件

【注】將其中的FileNameTake改成FileBaseName

,則生成的文件名列表只有名稱,沒有擴展名。

方法二:文件很多的情形

用方法一,當文件非常多的時候看起來比較亂,而且平鋪窗口,拖放文件夾操作也不方便。下面我們將這個操作定義為一個Mathematica的函數,並帶兩個參數來控制,具體使用方式與注意事項參見說明文字。

(*ext用來控制是否顯示擴展名,默認值為1,表示顯示,0或其他值不顯示;full控制是否顯示文件的絕對路徑與文件名,默認0表示不顯示,其他值,如1表示顯示*)

FnamesToExcel[ext_:1,full_:0]:=Module[{dir,files,info},

(*打開Windows自帶的選擇文件夾對話框,選擇要列出文件的文件夾*)

dir=SystemDialogInput["Directory"];

(*列出指定文件夾,包括子文件夾中的所有絕對文件名,如果將參數”*.*”改成{“*.jpg","*.png"},則僅僅顯示以jpg,png為後綴名的圖像文件*)

files=FileNames["*.*",File[dir],Infinity];

(*獲取文件名稱,修改日期和文件大小*)

info={If[full==0,If[ext==1,FileNameTake[#],FileBaseName[#]],#],FileDate[#],ToString[FileSize[#]]}&/@files;

(*打開另存為對話框保存輸入的Excel電子文件,其中默認的文件名稱為\[OpenCurlyDoubleQuote]文件列表\[CloseCurlyDoubleQuote]加上當前日期與時間*)

Return[Export[SystemDialogInput["FileSave",{"文件列表"<>StringJoin[ToString[#]&/@Take[DateList[],5]],{"Excel電子表格文件(*.xlsx,*xls)"->{"*.xlsx,*.xls"}}}],info]]]

執行以上表達式後定義函數,然後在最後面的空白位置單擊輸入左鍵輸入:

FnamesToExcel[0,0]

執行後生成帶有日期、大小和不帶擴展名的文件列表Excel文件,效果如圖4。

數學好玩:一鍵生成文件夾中所有文件列表到Excel電子表格

圖4 不帶擴展名

執行FnamesToExcel[1,0]帶有擴展名,效果如圖5。

數學好玩:一鍵生成文件夾中所有文件列表到Excel電子表格

圖5 帶有擴展名

執行FnamesToExcel[0,1],文件名為絕對文件名,效果如圖6。

數學好玩:一鍵生成文件夾中所有文件列表到Excel電子表格

圖6 絕對文件名

這樣的方法相對於Windows自帶程序直接處理的情形應該來說更實用,更直接。


分享到:


相關文章: