【PowerShell】フォルダ内の画像ファイル名をまとめてtxtに書き出す方法

PowerShell

どうもcoto.です。
今回は単純に、あるフォルダ内にある複数のJPEGファイルのファイル名をテキストで取得する方法です。

以前に似たもので、画像ファイルのサイズ等をcsvに吐き出すコマンドを紹介していますのでcsv形式で欲しいなという方は↓こちら。

使用ソフト

Windows PowerShell (Windows7以降のPCならインストールしなくても標準で搭載されています。初めて使う場合はスタートボタン右の検索バーに入力するとすぐ見つかります。)

コード(というかコマンド?)

# 設定項目
[string]$InFolder  = '①C:\Users\自分のPCの名前\Desktop\test'
[string]$OutFolder = '②C:\Users\自分のPCの名前\Desktop\test'

# ファイル名を格納するカスタムオブジェクトを作る
  $Names = @()

# jpgだけファイル名抽出(→処理に回す)
  $array = Get-ChildItem $InFolder -Filter "*.jpg"

# jpgのファイル名を取得して$Namesに格納していく作業を繰り返す
  foreach($filename in $array) {
       $filename.Name
       $Names += $filename.Name
  }

# $Namesをtxtへエクスポート
$Names |Out-File $OutFolder\name.txt

解説と使い方

① C:\Users\自分のPCの名前\Desktop\test は画像ファイルを入れているフォルダの絶対パスです。

② C:\Users\自分のPCの名前\Desktop\test はファイル名を入れたtxtファイルをどこに吐き出すか、なので吐き出したいフォルダの絶対パスを入れてください。①と同じでも構いません。

①、②のフォルダには関係のないファイルが入っていてもかまいませんが、jpgで抽出しているので、ファイル名を取得したくないjpgは入れないようにしてください。

$array = Get-ChildItem $InFolder -Filter “*.jpg“ の部分でjpgを抽出しているので、他の拡張子に変えてもOKです。拡張子関係なくすべてのファイル名を取得する場合は-Filter以降を削除してください。

もし拡張子を抜いたファイル名を取得したい場合は14行目を
$Names += [System.IO.Path]::GetFileNameWithoutExtension(“$filename”) に書き換えてください。

使い方

1.メモ帳などにコードをコピーし上記の①、②を設定する。

2.PowerShellを開く

3.1.で作製したコードを全てコピーしたらPowerShellの画面上で右クリック
(最後の行までコピペされたっぽいのにtxtが吐かれない場合は最終行が実行されていない可能性があるので1回Enterキーを押してください。)

御託

今回もストックフォト用に作成したコードです。
以前にご紹介した、csvに画像サイズを書き出すコードでももちろんファイル名を取得できるんですが、ファイル名だけならcsv開くよりテキストのほうが速いので簡略化しました。

ファイル名を1つ1つコピペするよりはだいぶ楽です。
ファイル選択>Shift + 右クリック>パスのコピー からのパス部分削除でもできなくはないんですが、作業フォルダが決まっているならコマンド使っちゃったほうが絶対楽だなーと。

どなたかのお役に立てばうれしいです。

コメント