基本的な用語として、Powershellで使われるコマンドのことをコマンドレット
と言います。
今回はPowershellの基本として、ディレクトリ(フォルダ)の操作に関するコマンドレットを勉強していきます。
GUIによる操作になれていると、操作のしづらさなどを感じると思いますが、頑張って慣れていきましょう。
1. ディレクトリの操作
1.1. カレントディレクトリを確認する(Get-Location)
CLIを学ぶ上で一番最初に身に着けてほしいことは「現在の自分の位置(カレントディレクトリ)を把握すること」です。
カレントディレクトリはGet-Location
コマンドレットを使って確認できます。
では、Powershellで実行してみましょう。
(base) PS C:\Users\XXXXX> Get-Location
Path
----
C:\Users\XXXXX
(base) PS C:\Users\XXXXX>
Pathと書かれた部分のC:\Users\XXXXX
がカレントディレクトリのフォルダパスになります。
この部分の見方を簡単に説明します。
まず、WindowsのCドライブは以下のような階層構造になっています。
C:
- Program Files
- Users
- Public
- XXXXX(自分のユーザ名) # 現在いる位置はココ
- Windows
・・・
C:\Users\XXXXX
の\
の記号がフォルダの切れ目になっていて、それぞれがフォルダ名に対応しています。
これを日本語で説明すると、「[C:]の中にある[Users]の中にある[XXXXX]フォルダ」となり、それがカレントディレクトリのパスです。
次に、なぜカレントディレクトリが重要かですが、現在の場所が異なるだけで結果が大きく変わることがあるからです。
例えば、以下のコマンドレットを実行するとします。
Get-ChildItem
これは「[カレントディレクトリにある]すべてのファイル/フォルダを表示する」コマンドレットです。
当然、この操作をDドライブ直下で行った場合と、Cドライブ直下で行った場合では結果が異なります。
この例では意図しない場所で実行したとしても特に影響はありません。
ですが、もし 「[カレントディレクトリにある]ファイルを削除する」 というコマンドを実行したらどうでしょうか?
重大な事故を引き起こす可能性もあるので、必ず現在の位置を確認するクセをつけましょう。
1.1.1. もう一つの確認方法
実はGet-Locationを使わなくても、カレントディレクトリは確認できます。
皆さんのpowershellの画面を見てみましょう。
(base) PS C:\Users\XXXXX>
コマンドを入力する行の左側には、常にカレントディレクトリが表示されています。
そうなると、Get-Locationは意味のないコマンドのように思えますがそうではありません。
そのあたりの理由については、別の記事で説明します。
余談
今後、様々なコマンドレットを学びますが、そのたびにGet-Location
などをすべて入力するのは正直面倒です。
この場合、キーボードのtab
キーを押すことで、入力途中の状態のところから先を補完してくれます。
いくつか候補がある場合は、何度かtabを押すことで選択肢が順番に出てくるので活用しましょう・
1.2. カレントディレクトリを変更する(Set-Location)
今回はDドライブ直下にpowershellという名前で資料を格納しました。
カレントディレクトリをこの場所に変更しましょう。
(base) PS C:\Users\XXXXX> Set-Location D:\powershell\
(base) PS D:\powershell>
Set-Location
はカレントディレクトリをセットするためのコマンドレットです。
このコマンドレットには、パラメータを1つ渡す必要があります。
そのパラメータが「カレントディレクトリにしたいフォルダのフォルダパス」になります。
上記のコードを実行したことで、カレントディレクトリは「Dドライブの中のpowershellフォルダ」になりました。
1.2.1. 絶対パスと相対パス
資料として配布したフォルダは以下のような構成となっています。
D:
- powershell # カレントディレクトリは今はココ
- data
- sampleFolder1
- sample2.txt
- sample3.txt
- sample4.log
- sample5.py
- sampleFolder2
- sampleFolder3
- sample10.log
- sample6.txt
- sample7.txt
- sample8.log
- sample9.py
- sample1.txt
- sample1.py
Set-Locationなど、フォルダパスを指定する場合、指定方法には絶対パス
と相対パス
があります。
まず、絶対パスはドライブから順番に階層を辿った場合のパスを書きます。
例えば、sampleFolder1をカレントディレクトリに指定する方法は以下の通りです。
Set-Location D:\powershell\data\sampleFolder1
絶対パスは、はがきの宛先の書き方に似ています。
例えば、皇居の住所(東京都千代田区千代田1−1)は以下のように考えられます。
東京都
- 千代田区
- 千代田
- 1丁目
- 1番地
このようにトップの位置(この例では東京都)から一階層ずつ掘り下げていくのが、絶対パスの考え方です。
では、以下の例題を解いてみましょう。
例題1.
絶対パスを使って、カレントディレクトリをsampleFolder3に変更しなさい。
一方、相対パスは「自分から見て、どの位置に相手がいるか」を指定します。
例えば、自分の家の隣の家の場所を説明する場合、一々住所をすべて読み上げるより、「私の家の右(左)隣」と説明したほうが早いですよね?
相対パスも自分から見た相手の位置を伝えるため、絶対パスより短く書ける傾向にあります。
説明のため、一度カレントディレクトリをdataフォルダに変更します。
Set-Location D:\powershell\data
カレントディレクトリ以下の階層のフォルダへ移動する場合、Set-Location .\(フォルダ名)
、あるいは単純にSet-Location (フォルダ名)
とします。
Set-Location .\sampleFolder1 # Set-Location sampleFolder1 でも可
逆に一つ上の階層へ移動したい場合は、Set-Location ..\
と.(ドット)
を2つ重ねて書きます。
Set-Location ..\
2つ上の階層に移動する場合は、..\..\
と書きます。それ以降も同じ考えでOKです。
では、同じ階層どうしのカレントディレクトリへはどう移動すれば良いでしょうか?
こちらは例題として考えてみましょう。
例題2.
カレントディレクトリをsampleFolder1に設定しなさい(絶対パスでも相対パスでもOK)
その後、相対パスを使って、カレントディレクトリをsampleFolder2に変更しなさい。
1.3. フォルダの中身を表示する(Get-ChildItem)
GUIであればエクスプローラーを使うことで、あるフォルダに含まれるファイル一覧を目視で確認することができます。
PowershellでもGet-ChildItem
を使うことでカレントディレクトリの中身を確認できます。
(base) PS D:\powershell\data> Set-Location D:\powershell\data
(base) PS D:\powershell\data> Get-ChildItem
ディレクトリ: D:\powershell\data
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r--- 2022/08/10 9:06 sampleFolder1
d-r--- 2022/08/10 13:19 sampleFolder2
-a---- 2021/02/25 8:33 0 sample1.py
-a---- 2022/08/10 9:08 6 sample1.txt
また、フォルダパスをパラメータとして渡すことで、パラメータで指定されたフォルダの中身を表示を表示できます。
こちらについては、例題で確かめてみてください。
例題3.
sampleFolder2の中身を表示しなさい
2. コマンドレットについて
2.1. コマンドレットの調べ方(Get-Command, Get-Help)
Powershellのコマンドレットはすべて動詞-名詞
という法則に従って命名されています。
例えば、Get-ChildItem
もGetという動詞とChildItemという名詞によって構成されていますね。
どのようなコマンドレットがあるか調べたい場合、以下のGet-Command
が役に立ちます。
さっそく実行してみましょう。
Get-Command
実行すると、定義済みのコマンドの一覧が表示されます。
この一覧のうち、コマンドレットであるものは左側にCmdlet
と書かれたものだけになります。
コマンドレットのみを抽出する場合は、以下のように書きます。
Get-Command -CommandType Cmdlet
この中でさらに調べたいコマンドについては、Get-Help
を使って詳細を確認しましょう。
例えば、Get-Locationについて調べてみます。
(base) PS D:\powershell\data> Get-Help Get-Location
名前
Get-Location
構文
Get-Location [<CommonParameters>]
Get-Location [<CommonParameters>]
エイリアス
gl
pwd
注釈
Get-Help を実行しましたが、このコンピューターにこのコマンドレットのヘルプ ファイルは見つかりません
でした。ヘルプの一部だけが表示されています。
-- このコマンドレットを含むモジュールのヘルプ ファイルをダウンロードしてインストールするには、U
pdate-Help を使用してください。
-- このコマンドレットのヘルプ トピックをオンラインで確認するには、「Get-Help Get-Location -Onli
ne」と入力するか、
https://go.microsoft.com/fwlink/?LinkID=113321 を参照してください。
(base) PS D:\powershell\data>
Get-Helpを使うと基本的な使い方を確認できます。
ただし、注釈にかかれている通り、表示されるのはヘルプの一部だけになります。
そこで、以下のコマンドレットを実行してみましょう。
Get-Help Get-Location -Online
実行するとMicrosoftの公式ドキュメントへ飛び、コマンドレットの詳細が確認できます。
授業内で教えられるコマンドレットはほんの一部だけになります。
やりたいことが見つかったら、自分でコマンドを調べてみると良いと思います。
例題4.
Get-Content
の使い方を調べなさい。
その後、sample3.txtの中身を表示しなさい。
例題5.
Get-ChildItemのヘルプを調べ、dataフォルダとそのサブフォルダのすべての要素を表示しなさい。
2.2. エイリアスについて
Linuxなど他のOSに慣れていると、カレントディレクトリの変更はSet-Location
ではなくcd
というコマンドで覚えている人もいます。
これは、Linuxのシェルで使われているコマンドなのですが、これらの既存のコマンド名と互換性を持たせるため、もしくは単純に名称を短縮するために、いくつかのコマンドレットには別名が登録されています。
この別名のことをエイリアス
と言います。
登録されているエイリアスは以下のコマンドで調べることができます。
Get-Alias
もしくは、調べたいコマンドレットがわかっている場合、Get-Helpの結果にも表示されているのでそちらを活用しましょう。
例えば、Get-ChildItemはlsという名前でエイリアスが登録されているので、dataフォルダの中身は以下の通りに調べることができます。
ls D:\powershell\data
例題6.
カレントディレクトリを表示する処理をそのコマンドレットのエイリアスを使って実施しなさい。
例題7.
次の一連の処理をエイリアスを使った形式に書き換えなさい。
Set-Location D:\powershell\data\sampleFolder1\
Get-ChildItem
Get-Content sample3.txt
Prev : 01.Powershellとは
Next : 03.コマンドの基本②