Powershell入門 - 03.コマンドの基本②

前回に続いて、Powershellでよく使われる基本的なコマンドレットについて見ていきましょう。

# 1. ディレクトリ操作コマンドレット
前回の続きでディレクトリの操作に関するコマンドレットを見ていきましょう。

## 1.1. ファイルの中身を表示する(Get-Content)
まずは前回の例題で紹介した`Get-Content`についてです。  
使い方を見ていきましょう。

```powershell
Set-Location D:\powershell\data           # 資料フォルダへ移動
Get-Content sample1.txt
Get-Content .\sampleFolder1\sample3.txt   # パスを指定すれば、カレントディレクトリ外のファイルも見れる
Get-Content -Path sample1.txt             # -Pathと指定してもOK
```

Get-Contentはパラメータで渡されたパスに該当するファイルの中身を画面に表示します。  
渡しているのはファイル名ではなく、ファイルのパスであることに注意しましょう。  
つまり、相対パス もしくは 絶対パスで記述する必要があります。

また、3番目の例で書かれている通り、-Pathと書いても同じ結果になります。  
この仕組みについても後ほど紹介していきます。

---
#### 例題1.
Set-Locationを使用して、Dドライブ直下に移動しなさい。  
その上で、資料内のどこかにあるsample6.txtを表示しなさい。

---

### 1.1.1. 位置指定パラメータと名前付きパラメータ
以下の2つの処理を確認してみましょう
```powershell
Get-Content D:\powershell\data\sample1.txt
Get-Content -Path D:\powershell\data\sample1.txt
```
2つの処理は同じ結果となりますが、-Pathが書かれている、書かれていないの違いがあります。
パラメータの指定の方法には、2つ種類があり、上の方法は**位置指定パラメータ**と呼ばれます。
パラメータには、渡す順番によってどのパラメータに渡すか決まっているものがあります。
「Get-Contentの0番目のパラメータはファイルのパス」と決まっているので、Get-Contentに続けてファイルのパスを書くと、そのファイルの中身が確認できます。

一方、どのパラメータに値を渡すかを明示的に指定する場合は、**名前付きパラメータ**を使います。
この方法だと渡す順番を気にせずに、パラメータに値を渡せます。
また、パラメータによっては、**名前付きパラメータでないと値を渡せないもの**があるので注意しましょう。

各コマンドレットのパラメータの種類やパラメータの順番は`Get-Help`で確認できます。
```powershell
Get-Help Get-Content -Online
```

---
#### 例題2.
Set-Locationを使用して、Dドライブ直下に移動しなさい。  
その上で、資料内のどこかにあるsample7.txtを表示しなさい。
※sample7.txtはutf8でエンコードされている。
　文字化けを解消するためのパラメータの指定方法を、`Get-Help Get-Content -Online`を使って調べること

#### 例題3.
dataフォルダ直下のファイルの一覧を表示しなさい。
ただし、**表示するのはファイルのみでフォルダは表示しないこと**
※`Get-Help Get-ChildItem -Online`でパラメータを調べること

---

ここまでは、`Get-*`コマンドを中心に、ディレクトリに影響を与える操作は行いませんでした。  
ここからは、主にディレクトリ(とその中のファイル)に影響を与える操作を中心に解説します。

## 1.2. ファイル/フォルダの新規作成(New-Item)
まずは、ファイル、フォルダを新しく作る方法を学びます。
ファイル、フォルダの新規作成には`New-Item`を使います。  
```powershell
Set-Location D:\powershell\data
New-Item .\sample1.log -ItemType File             # 位置指定Ver -ItemTypeでファイルの種別を指定
New-Item -Path .\sample1.log -ItemType File       # 名前付きVer
New-Item -Path . -Name sample1.log -ItemType File # ファイルを格納する場所とファイル名を分けて指定
```
0番目のパラメータはPathとなっていて、位置指定・名前付きどちらの指定も可能です。
Pathにはファイル名を含めた相対パス or 絶対パスを指定します。

またItemTypeパラメータではファイルの種別を指定できます。  
フォルダを作成したい場合、ItemTypeに`Directory`を指定しましょう。
こちらは例題で確認してみます。

最後の例では、ファイルの格納先と作成するファイル名を別々のパラメータで指定しています。
同じフォルダ内に複数ファイルをまとめて作成する場合、共通している格納先が分離していたほうが書きやすくなります。
この恩恵は、ループステートメントを学ぶと理解できると思います。。

#### 例題3.
dataフォルダの直下に`temporary`という名前のフォルダを作成しなさい。

#### 例題4.
以下の処理を2回以上実行しようとするとエラーが発生する。
```powershell
New-Item .\sample1.log -ItemType File 
```

New-Itemのヘルプを確認し、エラーを出さずに強制的に既存ファイルを上書きするにはどうすればよいか考え、実行しなさい。

---

## 1.3. ファイルのコピー(Copy-Item)

ファイルのコピーの仕方を学びましょう。
ファイルのコピーには`Copy-Item`を使います。
※例題3が実施された前提で説明します。

```powershell
Copy-Item .\sample1.txt temporary                          # 位置指定Ver
Copy-Item -Path .\sample1.txt -Destination temporary       # 名前付きVer
```

Copy-Itemには①コピー元のファイルのパス、②コピー先のフォルダのパスを必須で渡す必要があります。  

#### 例題5.
sampleFolder2内のsample8.logをtemporaryフォルダへコピーしなさい。

### 1.2.1. ワイルドカード
Copy-Itemなどいくつかのコマンドレットでは**ワイルドカード**が使えます。
ワイルドカードを使うと、パラメータに曖昧な値を渡すことができ、その条件に一致する対象に対して、一括して処理させることが可能です。

まずは、その処理を見てみましょう。
※dataフォルダ上で実行しましょう。

```powershell
Copy-Item -Path sample1.* -Destination .\temporary\
```
Pathには`sample1.*`という文字が渡されています。
この*がワイルドカードで、この部分には0文字以上のすべての文字が入ります。
この条件に該当dataフォルダ上のファイルは、sample1.txt、sample1.py、sample1.logになります。  
この3つのファイルがすべてtemporaryフォルダにコピーされます。

ワイルドカードを使うことで、複数ファイルへの処理が簡単に記述できます。
ワイルドカードに関して詳しく知りたい場合は[こちらのリンク](https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_wildcards?view=powershell-7.2)を参照してください。

---
#### 例題6.
sampleFolder1の中にある拡張子が.txtのファイルをすべてtemporaryフォルダに移動しなさい。

---

## 1.4. ファイルの移動(Move-Item, [Rename-Item])
コピーではなく、ファイルを移動したい場合は`Move-Item`を使います。  
※temporaryフォルダのsample1.logを削除して実行しましょう。

```powershell
Move-Item -Path sample1.log -Destination .\temporary\              # 移動先のフォルダを指定
Move-Item -Path sample1.log -Destination .\temporary\sample1.log   # 移動先のフォルダとファイル名を指定
```
上の書き方はCopy-Itemと同じです。
下の書き方の場合、ファイル名も含めて指定しています。
実はMove-Itemは移動をする際、併せて**ファイル名をリネームする**ことができます。

```powershell
New-Item test.txt -ItemType File
move-Item -Path test.txt -Destination .\temporary\test1.txt
```

フォルダの移動を伴わずにリネームだけしたい場合、`Rename-Item`というコマンドレットが用意されています。
こちらも使い方を調べて使えるようにしておきましょう。

---
#### 例題7.
temporaryフォルダにあるtest1.txtをtest2.txtにリネームしなさい。

---

## 1.5. ファイルの削除(Remove-Item)
フォルダ操作の最後は、ファイルの削除になります。
こちらは`Remove-Item`を使います。

```powershell
Remove-Item -Path .\temporary\test2.txt
Remove-Item -Path .\temporary\test2.txt -Confirm  # -Confirmをつけると削除前に確認メッセージが表示される
```

また、Remove-Itemもワイルドカードを使って、複数ファイルをまとめて削除することが可能です。

---
#### 例題8.
temporaryフォルダ内のすべてのファイルを削除しなさい。

#### 例題9.
temporaryフォルダを削除しなさい

---

Prev : [02.コマンドの基本①](./8f805fb23a4f074218f5)
Next : [04.変数](./69a20b5280277f42027d)

[目次へ戻る](./926b8053a031539437a3)