【PowerShell】ファイルの一覧を作成してテキストで出力する

技術記録

 今回は手短に。PowerShell(Win10)をつかって、ファイル一覧をテキストで出力できるファイルを作成したので自分メモとして覚え書きしておく。

おことわり

 PowerShellはセキュリティポリシーの関係上、ファイルを直接開くのは結構めんどくさい。というわけで、バッチファイルを別途作成して、一時的にポリシーを変更したうえで実行するようにする。つまりファイルは2つです。

コード

 同じディレクトリに無いとエラー起こすんで、任意のフォルダ作ってそこにまとめて入れておくといいと思います。

FileListOutput.bat:

@echo off
powershell -NoProfile -ExecutionPolicy Unrestricted .\FLO.ps1
exit /b 0
FLO.ps1:

# アセンブリの読み込み
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# フォームの作成
$form = New-Object System.Windows.Forms.Form 
$form.Text = "ファイルの一覧をテキストファイルとして出力する"
$form.Size = New-Object System.Drawing.Size(480,800) 
$form.StartPosition = "CenterScreen"

# ラベルの設定
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(20,30) 
$label.Size = New-Object System.Drawing.Size(440,20) 
$label.Text = "リストで出力したいファイルをドラッグアンドドロップしてください"

# OKボタンの設定
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(20,700)
$OKButton.Size = New-Object System.Drawing.Size(200,30)
$OKButton.Text = "出力する"
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::Yes
# 列挙子名:None, OK, Cancel, Abort, Retry, Ignore, Yes, No

# キャンセルボタンの設定
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(240,700)
$CancelButton.Size = New-Object System.Drawing.Size(200,30)
$CancelButton.Text = "キャンセル"
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
# 列挙子名:None, OK, Cancel, Abort, Retry, Ignore, Yes, No

#---#
# リストボックスの生成
$Listbox =  New-Object System.Windows.Forms.ListBox
$Listbox.Location = "20,70"
$Listbox.Size = "420,480"
$Listbox.AllowDrop = $True

# ドラッグエンター イベント
$Enter = {
  $_.Effect = "All"
}
$Listbox.Add_DragEnter($Enter)

# ドラッグドロップ イベント
$Drop = {
    $Name = @($_.Data.GetData("FileDrop"))

    # 1つずつ取得し、リストボックスに追加
    For ( $i = 0 ; $i -lt $Name.Count ; $i++ )
    {
        $filename = Get-ChildItem -Path $Name[$i]
        [void]$Listbox.Items.Add($filename.BaseName)
    }
}
$Listbox.Add_DragDrop($Drop)
#---#

# キーとボタンの関係
$form.AcceptButton = $OKButton
$form.CancelButton = $CancelButton

# ボタン等をフォームに追加
$form.Controls.Add($OKButton)
$form.Controls.Add($CancelButton)
$form.Controls.Add($label) 
$form.Controls.Add($Listbox)

# フォームを表示させ、その結果を受け取る
$result = $form.ShowDialog()

# 結果による処理分岐
if ($result -eq "Yes") {
    $shell=New-Object -ComObject Wscript.shell
    $desktopPath = $shell.SpecialFolders("Desktop")
    $newFilePath = $desktopPath + "/FileListOutput.txt"

    $Listbox.Items | Out-File $newFilePath
}

実行結果

fig.1 GUI

 別途コマンドのウィンドウが後ろで開いています。

fig.2 エクスポートファイル

 こんな感じで出力されます。正直もっと簡単な方法もあると思うんだけど、この最初の読み込みのバッチファイルと複数のPowerShellファイルでいろんなファイル処理をさせたかったのでまずはこんな感じになりました。以上です。

参考文献

 似たコードを探してください。申し訳ないんですが、メモする前にタブ消しちゃいました…

タイトルとURLをコピーしました