特定のフォルダーにどんなファイルが保存されているか、その一覧をテキストとして保存したいと思ったことはありませんか?
ファイルの棚卸しをしたり、現状を記録として残したり、誰かにファイルリストを共有したりと、様々な場面で役立ちます。
今回は、AutoIt を使って指定したフォルダーの中にあるファイルの一覧を、テキストファイルに書き出すスクリプトを紹介します。
実行するスクリプトの概要
このスクリプトを実行すると、まず一覧を取得したいフォルダーを選択するダイアログが表示されます。
フォルダーを選択すると、その直下にある全てのファイル名をリストアップし、デスクトップに「FileList.txt」という名前のテキストファイルを作成して、その中に書き出します。
処理が終わると、作成されたテキストファイルを自動で開いて中身を確認できます。
サンプルコード
#include <File.au3>
#include <MsgBoxConstants.au3>
; ### メイン処理 ###
; 1. ユーザーにフォルダーを選択してもらう
Local $sTargetFolder = FileSelectFolder("ファイル一覧を取得したいフォルダーを選択してください。", "")
If @error Then Exit
; 2. 指定されたフォルダー内のファイルリストを配列として取得する
Local $aFileList = _FileListToArray($sTargetFolder, "*", $FLTAR_FILES)
If @error Then
MsgBox($MB_ICONINFORMATION, "情報", "選択されたフォルダーにファイルは見つかりませんでした。")
Exit
EndIf
; 3. 出力するテキストファイルのパスを定義する
Local $sOutputFilePath = @DesktopDir & "\FileList.txt"
; 4. 書き込み用にテキストファイルを開く (既に存在する場合は上書き)
Local $hFile = FileOpen($sOutputFilePath, $FO_OVERWRITE)
If $hFile = -1 Then
MsgBox($MB_ICONERROR, "エラー", "出力ファイルを開けませんでした。")
Exit
EndIf
; 5. Forループで配列の中身を1行ずつファイルに書き込む
For $i = 1 To $aFileList[0]
FileWriteLine($hFile, $aFileList[$i])
Next
; 6. 開いたファイルを閉じる (非常に重要)
FileClose($hFile)
; 7. 完了メッセージを表示し、作成したファイルを開く
MsgBox($MB_OK, "完了", "ファイル一覧を出力しました。" & @CRLF & "パス: " & $sOutputFilePath)
ShellExecute($sOutputFilePath)
コードの詳しい解説
対象フォルダーの選択
Local $sTargetFolder = FileSelectFolder(...)
FileSelectFolder関数を使い、ユーザーに処理対象のフォルダーを選択させます。
ファイルリストの取得
Local $aFileList = _FileListToArray($sTargetFolder, "*", $FLTAR_FILES)
_FileListToArray関数が、指定されたフォルダー内にあるアイテムのリストを配列として取得します。
$sTargetFolder: ユーザーが選択したフォルダーのパスです。"*": ワイルドカードですべてのファイル名を対象にします。$FLTAR_FILES: 検索対象をファイルのみに限定するフラグです。
テキストファイルへの書き込み
ここがファイル出力処理の中心部分です。
ファイルを開く
Local $hFile = FileOpen($sOutputFilePath, $FO_OVERWRITE)
FileOpen関数で、書き込み先のファイルを開きます。
$sOutputFilePath: 書き出すファイルのパスを指定します。ここではデスクトップ上の「FileList.txt」です。$FO_OVERWRITE: ファイルを開く際のモードです。このモードは、ファイルが既に存在すればその中身をすべて消して上書きし、存在しなければ新規に作成します。
ファイルに書き込む
For $i = 1 To $aFileList[0]
FileWriteLine($hFile, $aFileList[$i])
Next
Forループを使い、_FileListToArrayで取得した配列$aFileListの中身(ファイル名)を一つずつ取り出します。
そしてFileWriteLine関数を使い、取り出したファイル名を1行ずつテキストファイルに書き込んでいきます。
ファイルを閉じる
FileClose($hFile)
FileOpenで開いたファイルは、書き込みが終わったら必ずFileCloseで閉じる必要があります。
完了通知と結果の確認
MsgBox(...)
ShellExecute($sOutputFilePath)
処理が正常に完了したことをユーザーにメッセージで伝え、ShellExecute関数を使って出力されたテキストファイルをメモ帳などで開き、すぐに結果を確認できるようにしています。
まとめ
このスクリプトは、ファイルの一覧化という基本的ながらも非常に実用的な処理です。
もしサブフォルダーの中にあるファイルもすべてリストアップしたい場合は、_FileListToArray を _FileListToArrayRec に変更するだけで簡単に応用できます。ぜひ試してみてください。
コメント