こんにちは、さち です。
先日、とあるフォルダーにあるすべてのファイルの名前を、テキストファイルに書き出したいことがありました。ファイル数は50個くらいです。
ファイルをすべてコピーしてテキストファイルにペーストしたら、ファイル名が書き出せるかな?……と思ったのですが、そんなに甘くありませんでした。
1個ずつコピペしていっても何とかなる数ですが、時間がかかりそうな単純作業だし気が進みません。
ということで、PC にやってもらいます。
「Windows PowerShell」を起動する
「Windows PowerShell」は、簡単にいうと、文字で Windows に指示を出せる機能。Windows7 以降に標準搭載されていています。(「コマンドプロンプト」の後継のようなもの)
PowerShell を起動してみます。
- + X キーを押してクイックリンクを開き、「Windows PowerShell」をクリック(「スタート」ボタン→「Windows PowerShell」でも起動可能)。(PowerShell の操作でユーザー権限に問題がある場合は「管理者」付きの方を使用)
- PowerShell の画面が表示されます。(行頭の表示は環境によって異なります)
ファイル名の一覧を書き出す
PowerShell で「コマンドレット」という指示を使うことで、PC に仕事をさせることができます。
- 例として、こちらのフォルダー(D:\sample)を使ってみます。
- Dドライブ直下に「list.txt」というファイルに書き出す場合、PowerShell に次のように記述して、Enter キーを押します。
dir "D:\sample" -name | Out-File "D:\list.txt"
- 指定した場所(D:\list.txt)にテキストファイルができています。
- テキストファイルの中身はこのとおり。ファイル,フォルダーの名前の一覧が書き出されています。
「ファイル」または「フォルダー」だけを書き出したい場合は、PowerShell の記述を次のようにすることで可能です。
#ファイルだけを書き出す dir "D:\sample" -name -include *.* | Out-File "D:\list.txt" #フォルダーだけを書き出す dir "D:\sample" -name -exclude *.* | Out-File "D:\list.txt"
ただし、簡易的な方法なので、拡張子がないファイル,名前の中に .(ドット)
を含むフォルダー等は意図した通りの動きをしてくれません。(厳密に区別したい場合は PowerShell を詳しく勉強して下さい)
使用したコマンドレットの簡単な解説
ファイル名さえ書き出せればそれで良いという人は、この項は読まなくていいです。
「Get-ChildItem」コマンドレット
Get-ChildItem
は、ディレクトリ(フォルダー)の情報を取得するコマンドレット。エイリアス(省略,別表記)を使って dir
ls
gci
と記述することも可能。
次のようなルールで記述されます。
Get-ChildItem (フォルダーの)場所 オプション #「場所」「オプション」は省略可能 #「場所」を省略した場合、現在(行頭に表示)のフォルダーが使用される #エイリアスを使った場合 dir 場所 オプション ls 場所 オプション gci 場所 オプション
#ファイルの名前だけを取得 -name #特定の「文字列」を含む/含まないファイルだけを取得 -include 文字列 -exclude 文字列 #「文字列」にはワイルドカード「*」を使用可能 #(サブ)フォルダーの中身も取得 -recurse
#「D:\sample」にあるファイルで名前に拡張子(xxx.xxx)を含むものを取得 Get-ChildItem "D:\sample" -name -include *.*
「Out-File」コマンドレット
Out-File
は、データをテキストファイルに保存するコマンドレット。次のようなルールで記述されます。
Out-File (書き出すファイルの)場所 オプション #「オプション」は省略可能
#上書きでなく追記をする -append #文字コードを指定する -encoding 文字コード #文字コードは「Unicode」「UTF8」「ASCII」などが使用可能
#「D:\sample」のファイル名一覧を「D:\list.txt」に追記する dir "D:\sample" -name | Out-File "D:\list.txt" -append
これら2個のコマンドレットを |(パイプライン)
で結ぶことで、前のコマンドレットの実行結果を、次のコマンドレットに引き渡しています。
つまり、dir
でファイル名一覧を取得し、それを Out-File
が受け取ってテキストファイルに書き出しています。
参考サイト
→ PowerShell Cmdlet - Get-ChildItem - ubweb.info様
→ PowerShell Cmdlet - Out-File - ubweb.info様
→ 互換性のあるエイリアス - Microsoft
コメント