Powershell」カテゴリーアーカイブ

Powershellでフォルダ名称をCSVに並べたり、CSVからフォルダを生成したりする

表題の通り、時々フォルダ内のフォルダ名をリスト化したくなったり、逆にリスト化したフォルダ名称を元にフォルダを自動作成したくなることがあります。

困った時のPowershellで実行可能です。なお、リストはCSVを前提としています。CSVだとExcelで読み書きもできるので、その点で便利です。

フォルダ名称をCSVにリスト化する

Get-ChildItem C:\hoge | Where-Object {$_.Attributes -eq "Directory"} | Select-Object PSChildName | Export-Csv foldername.csv -Encoding UTF8

上記のサンプルではC:\hoge直下のフォルダを一覧にしたCSV、forlername.csvを作成します。Where-Objectの部分でAttributesを使ってフォルダのみを指定しています。

次のSelect-Objectは、デフォルトのままだとフォルダの作成日やパスなどもCSVに出力してしまうので、フォルダ名称のみのリストにするために、値をPSChildNameに限定しています。

CSVからフォルダを作成する

仮に下記のようなデータが格納されたCSV、folder.csvがあったとします。先頭行のfoldernameはヘッダです。

foldername
hoge
piyo
fuga

続いて以下のコードを実行します。

Import-Csv folder.csv | ForEach-Object {New-Item $_.foldername -ItemType Directory}

これでカレントディレクトリにhoge piyo fugaの3つのフォルダが生成されます。

この2つのスクリプトを組み合わせると、フォルダ構造の把握の他にもファイルを除いたコピペのような操作もできるので重宝しています。必要であれば再帰実行用の-Recurseオプションをつけて頂くと便利なのではないかと思います。

PowerShellスクリプトをダブルクリックで実行する

PowerShellスクリプトは*.ps1形式というファイルに保存できますが、このファイルをダブルクリックしてもスクリプトは実行されません。

デフォルトの関連付けがメモ帳だからかと思いましたが、PowerShellの実行ファイルと関連付けをしてもうまく動いてくれません。この場合、別途ps1ファイルへのショートカットを作って、ショートカット経由で実行するとダブルクリックで動かせます。

PowerShellスクリプトへのショートカットを作成する

[@IT]

任意のタイミングで実行するタイプのスクリプトはこの方法で実行できるようにしておくと便利です。

Powershellでファイルをくじ引きする

ちょっと事情がございまして、何らかのプログラムで”特定のフォルダ内にあるテキストファイルをランダムに開く”方法を考えなければならなくなりました。

ネットで調べてみると抽選ツールといった名称でフリーソフトが色々あるのですが、今回はPCの制約上Windows付属の機能で実現しなくてはならないそうです。

そこで、不慣れながらPowershellでできないかを試してみました。

できあがったのがこれです。

$File = Get-ChildItem C:\lotto\*.* -Include *.txt | Get-Random
Invoke-Item $File

  1. Cドライブ直下に抽選用のlottoという名称のフォルダを作り、くじに相当するテキストファイルを入れておきます。
  2. プログラムはGet-ChildItemコマンドレットでlottoフォルダ内のテキストファイルをリスト化します。(-Include *.txtは要らないかと思いましたがくじ以外の物が保存されていると困るので念のためです)
  3. Get-Randomコマンドレットでランダムにリストから抽出が行われ、変数$Fileに格納されます。
  4. 2行目のInvoke-Itemで$Fileに格納したファイルを実行します。関連付けされている既定のプログラムで開く動作をします。

要は実行するとフォルダ内のテキストファイルをランダムにメモ帳で開いてくれるというだけです。あまり抽選めいた派手さはないですが、これでOKだと思います。

Powershellは今回初めて調べてみたのですが、ファイル管理などには有用そうな機能が色々あります。知っていると色々楽ができそうなのでおいおい自習しようかと思っています。