お久しぶりです。今回はパワーシェルを使って、ファイル一覧をエクセルに出力するプログラムを公開します。
完全に自分のメモ用に公開しております。コピーして使用する際は、自己責任でお願いします。
スクリプト内容
パワーシェル実行.cmd
rem パワーシェル実行用のバッチです rem 実行したいパワーシェルと同じフォルダ内に入れて使用してください rem 任意のファイル名をコマンドの最後にいれてください。 PowerShell -ExecutionPolicy RemoteSigned %~dp0FileNameGetOutPutExcel.ps1 pause
FileNameGetOutPutExcel.ps1
# Excelオブジェクト生成 $excel = New-Object -ComObject Excel.Application # 見えなくてよい $excel.Visible = $False # ワークブックを作成 $book = $excel.Workbooks.Add() # ワークシートを番号で指定し、接続する $sheet = $excel.Worksheets.Item(1) # セルの行を指定するカウント $Count = 1 # 自ファイルの絶対パスを取得 $Location = (Get-Location).Path #自パスのフォルダ内のファイルを取得してfor文で回す #下の矢印位置を変えることで特定の拡張のファイルのみを取得可能です #----------------------------------↓----- $items = Get-ChildItem $Location\*.* -File foreach ($item in $items) { #ファイル名を取得 $FileName = $item.Name #そのファイル名をエクセル内のCount行の1列目に記入 $sheet.Cells.Item($Count,1) = $FileName #Countを増やす(行数を下に下げる) $Count = $Count +1 } # 名前をつけて保存 $book.SaveAs("$Location\Result.xlsx") # Excelを閉じる $excel.Quit() # オブジェクト解法 $excel = $null [GC]::Collect()
使用例紹介
では使用例を紹介します。
下の画像をご覧ください。
このフォルダ内のファイル一覧をエクセルに出力します。
同フォルダ内にPowerShellスクリプト一つとバッチファイルを一つコピーします。
「パワーシェル実行.cmd」を実行すると、「Result.xlsx」というエクセルファイルができます。
そしてエクセルファイルを開くと
こんな感じでフォルダ内のファイル一覧が出力されるわけです。
しかし、これではパワーシェルスクリプトやバッチファイル自体もエクセルに出力されてしまいますね。美しくありません。
そこで、パワーシェルスクリプト側の16行目を「*.txt」や「*.pdf」に変更することによって、指定した拡張子ファイルのみを取得することも可能です。
念のためにpdfファイルのみ取得するパワーシェルスクリプトもここに乗せておきます。
# Excelオブジェクト生成 $excel = New-Object -ComObject Excel.Application # 見えなくてよい $excel.Visible = $False # ワークブックを作成 $book = $excel.Workbooks.Add() # ワークシートを番号で指定し、接続する $sheet = $excel.Worksheets.Item(1) # セルの行を指定するカウント $Count = 1 # 自ファイルの絶対パスを取得 $Location = (Get-Location).Path #自パスのフォルダ内のファイルを取得してfor文で回す #下の矢印位置を変えることで特定の拡張のファイルのみを取得可能です #----------------------------------↓----- $items = Get-ChildItem $Location\*.pdf -File foreach ($item in $items) { #ファイル名を取得 $FileName = $item.Name #そのファイル名をエクセル内のCount行の1列目に記入 $sheet.Cells.Item($Count,1) = $FileName #Countを増やす(行数を下に下げる) $Count = $Count +1 } # 名前をつけて保存 $book.SaveAs("$Location\Result.xlsx") # Excelを閉じる $excel.Quit() # オブジェクト解法 $excel = $null [GC]::Collect()
これを実行しますと。
はいこのようにpdfファイルのみエクセルに出力することが可能です。
以上紹介終わりです。