PowerShellメモ　パス関連操作

# ■目次
* 抽出
    * [パスからファイル名を取得（拡張子あり）](https://qiita.com/Kosen-amai/items/c7669e711d6b5743a840#%E3%83%91%E3%82%B9%E3%81%8B%E3%82%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%82%92%E5%8F%96%E5%BE%97%E6%8B%A1%E5%BC%B5%E5%AD%90%E3%81%82%E3%82%8A) 
    * [パスからファイル名を取得（拡張子なし）](https://qiita.com/Kosen-amai/items/c7669e711d6b5743a840#%E3%83%91%E3%82%B9%E3%81%8B%E3%82%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%82%92%E5%8F%96%E5%BE%97%E6%8B%A1%E5%BC%B5%E5%AD%90%E3%81%AA%E3%81%97) 
    * [パスから拡張子を取得](https://qiita.com/Kosen-amai/items/c7669e711d6b5743a840#%E3%83%91%E3%82%B9%E3%81%8B%E3%82%89%E6%8B%A1%E5%BC%B5%E5%AD%90%E3%82%92%E5%8F%96%E5%BE%97)
    * [パスから親の要素を取得](https://qiita.com/Kosen-amai/items/c7669e711d6b5743a840#%E3%83%91%E3%82%B9%E3%81%8B%E3%82%89%E8%A6%AA%E3%81%AE%E8%A6%81%E7%B4%A0%E3%82%92%E5%8F%96%E5%BE%97)
    * [パスから末尾の要素を取得](https://qiita.com/Kosen-amai/items/c7669e711d6b5743a840#%E3%83%91%E3%82%B9%E3%81%8B%E3%82%89%E6%9C%AB%E5%B0%BE%E3%81%AE%E8%A6%81%E7%B4%A0%E3%82%92%E5%8F%96%E5%BE%97)
    * [パスからルートディレクトリ（ドライブ文字）を取得](https://qiita.com/Kosen-amai/items/c7669e711d6b5743a840#%E3%83%91%E3%82%B9%E3%81%8B%E3%82%89%E3%83%AB%E3%83%BC%E3%83%88%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E6%96%87%E5%AD%97%E3%82%92%E5%8F%96%E5%BE%97)
    * [パスからルートディレクトリ（ドライブ文字）以外を取得](https://qiita.com/Kosen-amai/items/c7669e711d6b5743a840#%E3%83%91%E3%82%B9%E3%81%8B%E3%82%89%E3%83%AB%E3%83%BC%E3%83%88%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E6%96%87%E5%AD%97%E4%BB%A5%E5%A4%96%E3%82%92%E5%8F%96%E5%BE%97)
* 結合
    * [パスを結合](https://qiita.com/Kosen-amai/items/c7669e711d6b5743a840#%E3%83%91%E3%82%B9%E3%82%92%E7%B5%90%E5%90%88)
* チェック
    * [パス存在チェック](https://qiita.com/Kosen-amai/items/c7669e711d6b5743a840#%E3%83%91%E3%82%B9%E5%AD%98%E5%9C%A8%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF)
    * [絶対パスかチェック](https://qiita.com/Kosen-amai/items/c7669e711d6b5743a840#%E7%B5%B6%E5%AF%BE%E3%83%91%E3%82%B9%E3%81%8B%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF)
* 変換
    * [相対パスを絶対パスに変換](https://qiita.com/Kosen-amai/items/c7669e711d6b5743a840#%E7%9B%B8%E5%AF%BE%E3%83%91%E3%82%B9%E3%82%92%E7%B5%B6%E5%AF%BE%E3%83%91%E3%82%B9%E3%81%AB%E5%A4%89%E6%8F%9B)

# ■パス関連の操作

## ◇抽出

### ◎パスからファイル名を取得（拡張子あり）
![ps25.png](https://qiita-image-store.s3.amazonaws.com/0/142879/cd0da250-05d2-9c57-8300-d321655a0141.png)

```PowerShell
[System.IO.Path]::GetFileName("C:\Folder1\Folder2\FileA.txt")    # ファイル名部分を取得
```

```Text:実行結果
FileA.txt
```

### ◎パスからファイル名を取得（拡張子なし）
![ps26.png](https://qiita-image-store.s3.amazonaws.com/0/142879/b361cb78-343f-8635-5f2c-5fef9bb1845b.png)

```PowerShell
[System.IO.Path]::GetFileNameWithoutExtension("C:\Folder1\Folder2\FileA.txt")    # 拡張子を除いたファイル名部分を取得
```

```Text:実行結果
FileA
```

### ◎パスから拡張子を取得
![ps27.png](https://qiita-image-store.s3.amazonaws.com/0/142879/eeca62a6-d0cc-f7fc-0abd-116de940e84b.png)

```PowerShell
[System.IO.Path]::GetExtension("C:\Folder1\Folder2\FileA.txt")    # 拡張子部分を取得
```

```Text:実行結果
.txt
```

### ◎パスから親の要素を取得
![ps28.png](https://qiita-image-store.s3.amazonaws.com/0/142879/eb01e9a2-c809-a78f-02c8-c10078ffae41.png)

```PowerShell
Split-Path -Parent C:\Folder1\Folder2\FileA.txt
```

```Text:実行結果
C:\Folder1\Folder2
```

| 入力 | 出力 |
|:--|:--|
| `C:\Folder1\Folder2\FileA.txt`  | `C:\Folder1\Folder2`  |
| `C:\Folder1\Folder2\`  | `C:\Folder1`  |
| `C:\Folder1\Folder2`  | `C:\Folder1`  |
| `C:\Folder1`  | `C:\`  |
| `C:\`  |   |
| `C:`  | エラー  |


### ◎パスから末尾の要素を取得
![ps29.png](https://qiita-image-store.s3.amazonaws.com/0/142879/87377fc6-e7c0-e869-475e-b9c7dc3fb953.png)

```PowerShell
Split-Path -Leaf C:\Folder1\Folder2\FileA.txt
```

```Text:実行結果
FileA.txt
```

| 入力 | 出力 |
|:--|:--|
| `C:\Folder1\Folder2\FileA.txt`  | `FileA.txt`  |
| `C:\Folder1\Folder2\`  | `Folder2`  |
| `C:\Folder1\Folder2`  | `Folder2`  |
| `C:\Folder1`  | `Folder1`  |
| `C:\`  | `C:\`  |
| `C:`  | カレントディレクトリ名  |



### ◎パスからルートディレクトリ（ドライブ文字）を取得
![ps30.png](https://qiita-image-store.s3.amazonaws.com/0/142879/0d33da12-4625-a952-223b-a5d72483a7c5.png)

```PowerShell
Split-Path -Qualifier C:\Folder1\Folder2\FileA.txt
```

```Text:実行結果
C:
```
        
### ◎パスからルートディレクトリ（ドライブ文字）以外を取得
![ps31.png](https://qiita-image-store.s3.amazonaws.com/0/142879/1b64d63c-f58c-5f9a-7587-22b58ac12609.png)

```PowerShell
Split-Path -NoQualifier C:\Folder1\Folder2\FileA.txt
```

```Text:実行結果
\Folder1\Folder2\FileA.txt
```
        
## ◇結合

### ◎パスを結合
![ps32.png](https://qiita-image-store.s3.amazonaws.com/0/142879/ffca26a6-503f-e0e8-4fa8-b7bb7f6a1801.png)

```PowerShell
Join-Path C:\Folder1\Folder2 FileA.txt
```

```Text:実行結果
C:\Folder1\Folder2\FileA.txt
```

| 入力1 | 入力2 | 出力 |
|:--|:--|:--|
| `C:\Folder1\Folder2`  | `FileA.txt`  | `C:\Folder1\Folder2\FileA.txt`  |
| `C:\Folder1\Folder2\`  | `FileA.txt`  | `C:\Folder1\Folder2\FileA.txt`  |
| `C:\Folder1\Folder2\`  | `\FileA.txt`  | `C:\Folder1\Folder2\FileA.txt`  |


## ◇チェック

### ◎パス存在チェック

```PowerShell
# ファイル存在チェック
if (Test-Path C:\Folder1\FileA.txt) { Write-Host "あるよ" } else { Write-Host "ないよ" }
```

```Text:実行結果（ファイルが存在する場合）
あるよ
```

### ◎絶対パスかチェック

```PowerShell
if (Split-Path C:\Folder1\Folder2 -IsAbsolute) { Write-Host "1_絶対パス" } else { Write-Host "1_相対パス" }
if (Split-Path ..\Folder3\Folder4 -IsAbsolute) { Write-Host "2_絶対パス" } else { Write-Host "2_相対パス" }
```

```Text:実行結果
1_絶対パス
2_相対パス
```

## ◇変換

### ◎相対パスを絶対パスに変換

```PowerShell
Convert-Path .
```

```Text:実行結果（カレントディレクトリがWorkの場合）
C:\Work
```

| カレントディレクトリ | 入力 | 出力 |
|:--|:--|:--|
| `C:\Work`  | `.`  | `C:\Work`  |
| `C:\Folder1\Folder2`  | `..\..\Windows`  | `C:\Windows`  |
| `C:\Folder1\Folder2`  | `.\*.txt`  | `C:\Folder1\Folder2\FileA.txt`<br>`C:\Folder1\Folder2\FileB.txt`  |


# ■動作確認した環境
* PowerShell V4 (Windows 8.1)
* PowerShell V5 (Windows 10)

# ■参考サイト
* [PowerShell スクリプト | Microsoft Docs](https://docs.microsoft.com/ja-jp/powershell/scripting/overview)
* [Split-Path | Microsoft Docs](https://docs.microsoft.com/ja-jp/powershell/module/Microsoft.PowerShell.Management/Split-Path)
* [Join-Path | Microsoft Docs](https://docs.microsoft.com/ja-jp/powershell/module/Microsoft.PowerShell.Management/Join-Path)
* [Test-Path | Microsoft Docs](https://docs.microsoft.com/ja-jp/powershell/module/Microsoft.PowerShell.Management/Test-Path)
* [Convert-Path | Microsoft Docs](https://docs.microsoft.com/ja-jp/powershell/module/Microsoft.PowerShell.Management/Convert-Path)