BLOG
2021.03.15
PowerShell でPCのどこかにある迷子ファイル探し
こんにちは。
クラウドソリューショングループ 池崎です。
今回は、日々の作業で楽をするために便利な「 PowerShell 」をご紹介します。
プログラミングを嗜む人はもちろん、今まで触ったこともない人にもおすすめできる言語です。
Windows に標準搭載されている「 PowerShell 」は、正式には「 Windows PowerShell 」といい、ファイル操作に適した言語です。
標準搭載なので、何かをダウンロードしてくる必要はありません。思い立ったらすぐに始められます。
同じく標準搭載されている「コマンドプロンプト」の進化系に当たります。
PC自体の環境設定、ネットワーク環境の構築をするなら「コマンドプロンプト」の方に軍配が上がるものの、そうでないのなら「 PowerShell 」が使いやすいと思います。
ここでいう「ファイル操作」というのは、検索、作成、コピー、削除のこと。
少し勉強すれば、編集もできます。
どれも「 Powershell 」を使わなくてもできる作業ばかりですが、物量が多ければ多いほど「 Powershell 」を使うメリットが大きくなってきます。

サンプルとして、「あのファイルどこだっけ?」を解決してみます。
沢山のフォルダや大量のファイルの中から目的のファイル一つを探すとなると大変です。
PowerShell でファイルを探してみよう
まずは「 PowerShell 」を起動します。
画像は Windows 10 です。
デスクトップの下部にある虫眼鏡(検索フォーム)で「 PowerShell 」を入力。
なんだか色々出ますが、今回使うのは「 Windows PowerShell 」です。
「 Windows Powershell ISE 」の方でもできないことはありませんが、こちらは上級者向けと思ってください。
無事開けたら、こんな画面が出ているはずです。
あとはコマンドを入力すれば完了です。
今回使うのは、ファイルの一覧を出力するコマンドである「Get-ChildItem」。
構文は単純に、
Get-ChildItem -Path<探すフォルダのパス> -Filte<ファイル名> -Recurse
となります。
<>の部分を目的に合わせて置き換えましょう。
「-Path」は、この後から次の半角スペース、または改行までに「フォルダパス」が書かれていますよ、という宣言です。
ちなみに、パスというのはアドレスのこと。
知りたいフォルダ、ファイルを右クリックして、プロパティを確認することでわかります。

パスの確認 ①

パスの確認 ②
<探すフォルダのパス>の部分に、「この中のどこかにあるはず」というフォルダを指定します。
今回は、「このパソコンの中にはある…」ということで、パスは「C:(Cドライブ)」とします。
反映させるとこうなりますね。
Get-ChildItem -Path c: -Filte<ファイル名> -Recurse
「-Filter」は、この後から次の半角スペース、または改行までに「欲しいファイルの名前」が書かれていますよ、という宣言です。
ファイル名が完璧にわかるならそれに越したことはないのですが、どこに保存したかわからないような場合、大抵覚えていませんよね。
ここでは、「ファイル名に”あああ”が含まれているテキストファイル」ということにします。
テキストファイルには、必ず末尾に「.txt」という拡張子が付くので、単純に考えると「あああ.txt」となります。
ただし、このままでは「あああ.txt」というファイル名しか見つかりません。
条件は「”あああ”が含まれている」なので、もうひと手間必要です。
ここで使うのがワイルドカード。いくつかある中で、今回使うのは「*(アスタリスク)」です。
ワイルドカードとしての「*」には、「0桁以上の文字列」という意味があります。
「”あああ”が含まれている」ということは、”あああ”はもちろん、”@@あああ”も”あああ@@”も”@@@@あああ@@@@”も該当するということ。
つまり、”あああ”の前後にワイルドカードを指定することになり、「*あああ*」が正解です。
拡張子がわからない場合はこのままでOK。
今回は、これに必ず末尾に付く拡張子をくっつけて、「*あああ*.txt」となります。
反映させるとこうです。
Get-ChildItem -Path c: -Filte *あああ*.txt -Recurse
無事埋めたので、実行します。
「Get-ChildItem -Path c: -Filte *あああ*.txt -Recurse」を直接入力するか、メモ帳などで書いたものをコピーして右クリックで貼り付けましょう。
特に何も表示されませんが、右クリックだけでコピーした文が貼り付けられているはずです。
あとは Enter を一回押すだけです。
対象のファイルが多いので少し時間はかかりますが、画像のように、「PS C:\Users\****>」が最終行に表示されれば完了です。
フォルダの場所と、検索条件に合うファイル名が表示されます。
今回はサンプルなので、実行する前に検索にヒットするファイルを作成しておきました。
欲しいファイルがない場合、何も出力されません。
その場合、「*あああ*.txt」の部分が間違っている可能性大です。
拡張子、ワイルドカードは半角になっていますか?
検索条件のカタカナやアルファベットは、半角・全角の確認を忘れずに。
うろ覚えでしょうから、思い当たる限り変更して試してみましょう。
それでも出ない場合、間違えているのは「c:」の部分でしょう。
今回の例だと、その場合PCに保存されていないことになりますが…。
エクスプローラー (File Explorer) にも検索機能はあるのですが、Windows 10 のフォルダ検索は非常によく固まるので、こちらの方が安心。
慣れるまでは難しく思えるかも知れませんが、フォルダを手動で探してまわることを考えると、涙が出るほど簡単で、早いです。
ところで、「候補がたくさん出たら、一つ一つ見に行くのめんどくさい」と思いませんでしたか?
もう少し工夫して、利便性を上げてみます。
見つけたファイルをデスクトップにコピーして、対象のファイルを一箇所に集めて確認できるようにします。
お試しする場合、「C:\Users\<userName>」はデスクトップのアドレスで、ログインしているユーザごとに違うので、自分の環境に合わせて変更してください。
デスクトップに新しいフォルダ「createFolder」を作成
New-Item C:\Users\<userName>\createFolder -ItemType Directory
作成したフォルダ「createFolder」に検索結果を出力
Get-ChildItem -Path c: -Filte *あああ*.txt -Recurse | ForEach-Object {Copy-Item $_.fullname C:\Users\<userName>\createFolder}
「PS C:\Users\****>」が最終行に表示されれば完了です。
特に何も表示されないので不安かも知れませんが、表示させるためのコマンドを含んでいないので、この場合は何もなくて正解です。
これを実行すれば、デスクトップに現れたフォルダ「createFolder」に条件にヒットしたファイルがいるはずです。
デスクトップにコピーしてくるので、この場合は元々どこにあったのかはわかりません。
目的に合わせて使い分けが必要ですね。
いかがでしょうか?
最初に実行した「Get-ChildItem」は、該当するファイルが存在するフォルダを探すためのものです。
次に実行した「Get-ChildItem」は、該当するファイルを集めるためのものです。
両方を同時に行うこともできますし、まったく同じファイル名が複数あった時の対応など、まだまだ改良の余地があります。
今回は「 Windows PowerShell 」でお話しましたが、実はMacでも使える「 PowerShell Core 」というものがあります。
ほぼ同じものではあるものの別物で、完全な互換性は保証されていません。
「 Windows PowerShell 」で作ったものを「 PowerShell Core 」で、「 PowerShell Core 」で作ったものを「 Windows PowerShell 」で使おうとするならば、自力で修正できるだけの知識は付けておきたいところです。
興味が湧いたなら、是非勉強して、サンプルをオリジナル版へと改良してみてください。
