目次
PowerShellを使ってフォルダ内の項目を一覧表示してみましょう
PowerShellはMicrosoftが開発したシェルスクリプト言語です。CUIの一つで、コマンドレットと呼ばれる命令文を使います。
C#などの上級言語を使うまででもないけれど、小規模でもシステム管理などを自動的に行えるような簡易的なシステムを開発したい場合に向いている言語と言えます。
今回はフォルダ内の項目を一覧で表示するコマンドレットについて説明します。この記事は、これからPowerShellを使って開発を始めたい方へ向けた記事ですが、コマンドレットについて簡易的に説明している項目もあります。そのため、PowerShellとはどういうものかという点についても知ることができるでしょう。
Get-ChildItemについて
Get-ChildItemコマンドレットを使用すると、パスで指定したフォルダ内の情報が取得できます。項目の名前だけでなくファイルサイズや項目の属性、最終書き込み時間についても取得可能です。
PowerShellにはいくつかのパラメータが用意されていて、パラメータを使うことで更に条件を指定した取得が可能です。また、パラメータを複数組み合わせることもできますのでより複雑な条件指定に対応しています。
Get-ChildItemコマンドレットを使って表示される一覧の内容は?
Get-ChildItemコマンドレットを使うとフォルダの内容が表形式で取得できます。ここでは、PowerShellのコマンドレットの説明の前に、一覧の項目について見ていきましょう。
一覧には以下の項目が表示されます。
項目名 | 内容 |
---|---|
Mode | モード(属性) |
LastWriteTime | 最終書き込み時間 |
Length | ファイルサイズ |
Name | ファイル名、ディレクトリ名 |
モードに関しては以下の内容を示します。そのファイルやフォルダの属性によって表示内容が異なります。また、ファイルの場合は属性の指定がなければ「—–」と表示されます。
モードに表示される英字は、内容を英語表記した頭文字の為、イメージしながら覚えましょう。
モード名 | 英語表記 | 内容 |
---|---|---|
d | Directory | ディレクトリ |
a | Archive | アーカイブ |
r | Only | 読み取り専用 |
h | Hidden | 非表示 |
s | System | システム |
l | Link | リンク |
フォルダの情報を取得するには?
ここからはGet-ChildItemコマンドレットとパラメータについて例をあげながら説明します。まずは、指定したフォルダ内の情報を単純に取得するコマンドレットについて見ていきましょう。
Get-ChildItem -Path <フォルダパス>
Pathパラメータおよびフォルダパスを指定せずに実行するとカレントフォルダの内容を一覧として表示します。
以下のコマンドを実行するとCドライブのtestフォルダ配下の項目を一覧表示します。
(例)Get-ChildItem -Path C:\test
一覧のMode欄を見ると、フォルダの場合は「d」が表示されます。特に属性がないファイルの場合は「——」と表記されます。
非表示の項目を表示するには?
続いては、隠し(非表示)項目を含めた一覧の取得について説明します。
Get-ChildItem -Path <フォルダパス> -Force
以下のコマンドを実行するとCドライブのtestフォルダ配下の、隠し項目も含めて一覧表示します。
(例)Get-ChildItem -Path C:\test -Force
隠し項目の場合はMode欄に「h」が表示されます。
ここで注意事項ですが、ファイルやフォルダにアクセス権が付与されていない場合はForceパラメータを使ってもその項目に関しては表示されません。
指定フォルダ配下のサブフォルダも含めて表示するには?
パスで指定したフォルダのサブフォルダも含めて取得する場合は以下のコマンドレットを使用します。
Get-ChildItem -Path <フォルダパス> -Recurse
次のコマンドを実行するとCドライブのtestフォルダ配下の項目をサブフォルダの内容も含めて取得します。
(例)Get-ChildItem -Path C:\test -Recurse
指定したファイル配下のサブフォルダを取得しますので、複数のフォルダがツリー状となっている場合は表示に時間がかかる可能性があります。そのため可能な限りフォルダパスを指定して絞り込みをした方が良いでしょう。
項目の名前のみを表示するには?
Nameパラメータを使うことで、項目の名前のみを表示します。最終書き込み時間やモード、ファイルサイズの表示が不要な場合に使えます。
Get-ChildItem -Path <フォルダパス> -Name
以下のコマンドを実行するとCドライブのtestフォルダ内の項目名のみを表示します。
(例)Get-ChildItem -Path C:\test -Name
ファイルやフォルダ名のみを羅列するので見やすく表示されます。
ワイルドカードを使用して特定の名前の項目を取得するには?
PowerShellではフォルダパス指定の際にワイルドカードを使用してパターンマッチングすることが可能です。
以下のコマンドを実行するとCドライブのtestフォルダ内の中で拡張子が「.log」のファイルのみを表示します。
(例)Get-ChildItem -Path C:\test\*.log
他の例を挙げると、頭文字がAから始まる項目のみを取得したい場合は以下のようになります。
(例)Get-ChildItem -Path C:\test\A*
ワイルドカードにはパターンがありますので紹介します。いずれも半角で入力してください。このワイルドカードはPowerShellだけでなく他の言語やSQLでも使えますので覚えておくと便利です。
入力値 | 内容 |
---|---|
* (アスタリスク) | 任意の0文字以上の文字列 |
? (疑問符) | 任意の1文字 |
特定のファイル名を除外して取得するには?
次に、指定したファイル名以外を表示する方法について説明します。
Get-ChildItem -Path <フォルダパス> -Exclude <条件>
例えば、Cドライブのtestフォルダに次の名前のファイルが存在するとします。
A100.txt
A100.log
B200.txt
B300.txt
以下のコマンドを実行するとCドライブのtestフォルダの中で拡張子が「.log」となっているファイルを除外して、ファイル名のみ表示します。
(例)Get-ChildItem -Path C:\test -Name -Exclude *.log
すると実行結果は次のようになります。
A100.txt
B200.txt
B300.txt
拡張子が「.log」のA100.logが除外された形で一覧の取得ができました。
パラメータを組み合わせて様々な方法で一覧を取得してみましょう
ここまでいくつかのパラメータについて説明してきましたが、パラメータを複数指定して一覧を取得することもできます。
以下のコマンドを実行するとCドライブのtestフォルダ配下の項目をサブフォルダの内容も含めて、隠し項目についても取得します。
(例)Get-ChildItem -Path C:\test -Recurse -Force
また、次のコマンドを実行するとCドライブのtestフォルダ内の中で拡張子が「.log」のファイルのみを、隠し項目についても取得します。
(例)Get-ChildItem -Path C:\test\*.log -Force
コマンドレットをたくさん入力して実行してみましょう
PowerShellはWindowsコマンドとの互換性に優れています。今回説明したGet-ChildItemコマンドレットはWindowsコマンドでいうところの「dir」との互換性があります。
PowerShellのコマンドレットに馴染めなくてもコマンドプロンプト上で使い慣れているWindowsコマンドと照らし合わせてみるとイメージしやすい場合があります。
ご自身で使いたいコマンドレットとの互換性を調べたり、コマンドをたくさん入力してPowerShellを攻略していきましょう。
インフラエンジニア専門の転職サイト「FEnetインフラ」
FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。
転職をお考えの方は気軽にご登録・ご相談ください。