【Powershell】カレントディレクトリ配下のファイル一覧取得

# はじめに
Powershellでファイル一覧を取得するとき

1. サブディレクトリ内のファイルも対象に（再帰的に）：基本
2. ディレクトリは一覧から除外する（ファイルのみ）
3. １行１ファイルで（絶対パス）
4. 絶対パスだと長いので相対パスに
5. 更新日時も出したい

と、条件を追加していった各段階のコマンドと実行結果例。

## 確認環境
OS： Windows 10
PowerShellバージョン：以下2種類
* 5.1.19041.4170
* 7.3.4

## 実行ディレクトリ
サクラエディタのディレクトリで実行した結果を載せてます。
keyword配下が多かったので、少し減らして実行してます。

```:実行例のカレントディレクトリ
PS > cd -LiteralPath "C:\Program Files (x86)\sakura"
PS > pwd

Path
----
C:\Program Files (x86)\sakura


PS >

```

# コマンドまとめ

```powershell:1. 再帰的に
Get-ChildItem -Recurse
```
```powershell:2. ファイルのみ
Get-ChildItem -Recurse -File
```
```powershell:3. 絶対パス
Get-ChildItem -Recurse -File | %{$_.FullName}
```
```powershell:4. 相対パス
Get-ChildItem -Recurse -File | %{($_.FullName).Replace((Get-Location).Path,'.')}
```
```powershell:4-b. 相対パス２
Get-ChildItem -Recurse -File -Name
```
```powershell:5. 更新日時＋相対パス
Get-ChildItem -Recurse -File | %{(Get-Date $_.LastWriteTime -Format "yyyy/MM/dd HH:mm:ss") + " " + ($_.FullName).Replace((Get-Location).Path,'.')}
```

## Alias使用時
Aliasとオプションの省略系で少し短くしたコマンド
```powershell:1. 再帰的に
ls -R
```
```powershell:2. ファイルのみ
ls -R -File
```
```powershell:3. 絶対パス
ls -R -File | %{$_.FullName}
```
```powershell:4. 相対パス
ls -R -File | %{($_.FullName).Replace((pwd).Path,'.') }
```
```powershell:4-b. 相対パス２
ls -R -File -Name
```
```powershell:5. 更新日時＋相対パス
ls -R -File | %{(Get-Date $_.LastWriteTime -Format "yyyy/MM/dd HH:mm:ss") + " " + ($_.FullName).Replace((pwd).Path,'.') }
```

【参考】 
```:Get-ChildItem の Alias
PS > Get-Alias -Definition Get-ChildItem

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           dir -> Get-ChildItem
Alias           gci -> Get-ChildItem
Alias           ls -> Get-ChildItem


PS >
```
```:Get-Location の Alias
PS > Get-Alias -Definition Get-Location

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           gl -> Get-Location
Alias           pwd -> Get-Location


PS >
```


# 1. 基本
## コマンド
```powershell
Get-ChildItem -Recurse
```
## 実行例
```
PS > Get-ChildItem -Recurse


    ディレクトリ: C:\Program Files (x86)\sakura


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2024/04/07     23:06                keyword
d-----        2021/07/10     17:28                license
-a----        2019/01/30     11:42         590848 bregonig.dll
-a----        2020/01/12      0:11        3387918 ctags.exe
-a----        2020/05/30      3:08         172071 macro.chm
-a----        2020/05/30      3:08          60645 plugin.chm
-a----        2020/05/30      3:08        2572017 sakura.chm
-a----        2020/05/30      3:10        1654272 sakura.exe
-a----        2020/05/30      3:09           1021 sakura.exe.ini
-a----        2020/05/30      3:09           1001 sakura.exe.manifest
-a----        2020/05/30      3:10         229888 sakura_lang_en_US.dll
-a----        2021/07/10     17:28          32391 unins000.dat
-a----        2021/07/10     17:27        1192857 unins000.exe


    ディレクトリ: C:\Program Files (x86)\sakura\keyword


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2020/05/30      3:09           2905 ABAP4.kwd
-a----        2020/05/30      3:09          10929 ActionScript.kwd
-a----        2020/05/30      3:09           1222 AHK.col
-a----        2020/05/30      3:09          13679 AHK.khp
-a----        2020/05/30      3:09            218 AHK.rkw
-a----        2020/05/30      3:09           2092 wsh.kwd
-a----        2020/05/30      3:09           3562 xul-attr.kwd
-a----        2020/05/30      3:09           1012 xul.kwd


    ディレクトリ: C:\Program Files (x86)\sakura\license


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2021/07/10     17:28                bregonig
d-----        2021/07/10     17:28                ctags
-a----        2020/05/30      3:08            949 LICENSE


    ディレクトリ: C:\Program Files (x86)\sakura\license\bregonig


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2019/01/30     11:22           5586 bsd_license.txt
-a----        1999/11/24      2:29           5353 perl_license.txt
-a----        2006/08/23     15:01          11901 perl_license_jp.txt


    ディレクトリ: C:\Program Files (x86)\sakura\license\ctags


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2020/01/12      0:06          18007 COPYING
-a----        2020/01/12      0:06          10936 COPYING.MinGW-w64-runtime.txt
-a----        2020/01/12      0:06           1289 Copyright.libxml2
-a----        2020/01/12      0:06           1081 LICENSE.janssen
-a----        2020/01/12      0:06           1058 LICENSE.libyaml


PS >
```

# 2. ファイルのみ（ディレクトリごと）
## コマンド
```powershell
Get-ChildItem -Recurse -File
```
## 実行例
```
PS > Get-ChildItem -Recurse -File


    ディレクトリ: C:\Program Files (x86)\sakura


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2019/01/30     11:42         590848 bregonig.dll
-a----        2020/01/12      0:11        3387918 ctags.exe
-a----        2020/05/30      3:08         172071 macro.chm
-a----        2020/05/30      3:08          60645 plugin.chm
-a----        2020/05/30      3:08        2572017 sakura.chm
-a----        2020/05/30      3:10        1654272 sakura.exe
-a----        2020/05/30      3:09           1021 sakura.exe.ini
-a----        2020/05/30      3:09           1001 sakura.exe.manifest
-a----        2020/05/30      3:10         229888 sakura_lang_en_US.dll
-a----        2021/07/10     17:28          32391 unins000.dat
-a----        2021/07/10     17:27        1192857 unins000.exe


    ディレクトリ: C:\Program Files (x86)\sakura\keyword


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2020/05/30      3:09           2905 ABAP4.kwd
-a----        2020/05/30      3:09          10929 ActionScript.kwd
-a----        2020/05/30      3:09           1222 AHK.col
-a----        2020/05/30      3:09          13679 AHK.khp
-a----        2020/05/30      3:09            218 AHK.rkw
-a----        2020/05/30      3:09           2092 wsh.kwd
-a----        2020/05/30      3:09           3562 xul-attr.kwd
-a----        2020/05/30      3:09           1012 xul.kwd


    ディレクトリ: C:\Program Files (x86)\sakura\license


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2020/05/30      3:08            949 LICENSE


    ディレクトリ: C:\Program Files (x86)\sakura\license\bregonig


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2019/01/30     11:22           5586 bsd_license.txt
-a----        1999/11/24      2:29           5353 perl_license.txt
-a----        2006/08/23     15:01          11901 perl_license_jp.txt


    ディレクトリ: C:\Program Files (x86)\sakura\license\ctags


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2020/01/12      0:06          18007 COPYING
-a----        2020/01/12      0:06          10936 COPYING.MinGW-w64-runtime.txt
-a----        2020/01/12      0:06           1289 Copyright.libxml2
-a----        2020/01/12      0:06           1081 LICENSE.janssen
-a----        2020/01/12      0:06           1058 LICENSE.libyaml


PS >
```

# 3. 絶対パス（１行１ファイル）
## コマンド
```powershell
Get-ChildItem -Recurse -File | %{$_.FullName}
```
## 実行例
```
PS > Get-ChildItem -Recurse -File | %{$_.FullName}
C:\Program Files (x86)\sakura\bregonig.dll
C:\Program Files (x86)\sakura\ctags.exe
C:\Program Files (x86)\sakura\macro.chm
C:\Program Files (x86)\sakura\plugin.chm
C:\Program Files (x86)\sakura\sakura.chm
C:\Program Files (x86)\sakura\sakura.exe
C:\Program Files (x86)\sakura\sakura.exe.ini
C:\Program Files (x86)\sakura\sakura.exe.manifest
C:\Program Files (x86)\sakura\sakura_lang_en_US.dll
C:\Program Files (x86)\sakura\unins000.dat
C:\Program Files (x86)\sakura\unins000.exe
C:\Program Files (x86)\sakura\keyword\ABAP4.kwd
C:\Program Files (x86)\sakura\keyword\ActionScript.kwd
C:\Program Files (x86)\sakura\keyword\AHK.col
C:\Program Files (x86)\sakura\keyword\AHK.khp
C:\Program Files (x86)\sakura\keyword\AHK.rkw
C:\Program Files (x86)\sakura\keyword\wsh.kwd
C:\Program Files (x86)\sakura\keyword\xul-attr.kwd
C:\Program Files (x86)\sakura\keyword\xul.kwd
C:\Program Files (x86)\sakura\license\LICENSE
C:\Program Files (x86)\sakura\license\bregonig\bsd_license.txt
C:\Program Files (x86)\sakura\license\bregonig\perl_license.txt
C:\Program Files (x86)\sakura\license\bregonig\perl_license_jp.txt
C:\Program Files (x86)\sakura\license\ctags\COPYING
C:\Program Files (x86)\sakura\license\ctags\COPYING.MinGW-w64-runtime.txt
C:\Program Files (x86)\sakura\license\ctags\Copyright.libxml2
C:\Program Files (x86)\sakura\license\ctags\LICENSE.janssen
C:\Program Files (x86)\sakura\license\ctags\LICENSE.libyaml
PS >
```


# 4. 相対パス
[5. 更新日時＋相対パス](#5-更新日時相対パス) につなげるための相対パス取得コマンド
## コマンド
```powershell
Get-ChildItem -Recurse -File | %{ ($_.FullName).Replace((Get-Location).Path,'.') }
```
## 実行例
```
PS > Get-ChildItem -Recurse -File | %{ ($_.FullName).Replace((Get-Location).Path,'.') }
.\bregonig.dll
.\ctags.exe
.\macro.chm
.\plugin.chm
.\sakura.chm
.\sakura.exe
.\sakura.exe.ini
.\sakura.exe.manifest
.\sakura_lang_en_US.dll
.\unins000.dat
.\unins000.exe
.\keyword\ABAP4.kwd
.\keyword\ActionScript.kwd
.\keyword\AHK.col
.\keyword\AHK.khp
.\keyword\AHK.rkw
.\keyword\wsh.kwd
.\keyword\xul-attr.kwd
.\keyword\xul.kwd
.\license\LICENSE
.\license\bregonig\bsd_license.txt
.\license\bregonig\perl_license.txt
.\license\bregonig\perl_license_jp.txt
.\license\ctags\COPYING
.\license\ctags\COPYING.MinGW-w64-runtime.txt
.\license\ctags\Copyright.libxml2
.\license\ctags\LICENSE.janssen
.\license\ctags\LICENSE.libyaml
PS >
```

# 4-b. 相対パス２（参考）
パスが取得できれば他の情報は不要、という場合の取得コマンド

## コマンド
```powershell
Get-ChildItem -Recurse -File -Name
```
## 実行例
```
PS > Get-ChildItem -Recurse -File -Name
bregonig.dll
ctags.exe
macro.chm
plugin.chm
sakura.chm
sakura.exe
sakura.exe.ini
sakura.exe.manifest
sakura_lang_en_US.dll
unins000.dat
unins000.exe
keyword\ABAP4.kwd
keyword\ActionScript.kwd
keyword\AHK.col
keyword\AHK.khp
keyword\AHK.rkw
keyword\wsh.kwd
keyword\xul-attr.kwd
keyword\xul.kwd
license\LICENSE
license\bregonig\bsd_license.txt
license\bregonig\perl_license.txt
license\bregonig\perl_license_jp.txt
license\ctags\COPYING
license\ctags\COPYING.MinGW-w64-runtime.txt
license\ctags\Copyright.libxml2
license\ctags\LICENSE.janssen
license\ctags\LICENSE.libyaml
PS >
```

# 5. 更新日時＋相対パス
## コマンド
```powershell
Get-ChildItem -Recurse -File | %{ (Get-Date $_.LastWriteTime -Format "yyyy/MM/dd HH:mm:ss") + " " + ($_.FullName).Replace((Get-Location).Path,'.') }
```
## 実行例
```
PS > Get-ChildItem -Recurse -File | %{ (Get-Date $_.LastWriteTime -Format "yyyy/MM/dd HH:mm:ss") + " " + ($_.FullName).Replace((Get-Location).Path,'.') }
2019/01/30 11:42:26 .\bregonig.dll
2020/01/12 00:11:06 .\ctags.exe
2020/05/30 03:08:42 .\macro.chm
2020/05/30 03:08:44 .\plugin.chm
2020/05/30 03:08:46 .\sakura.chm
2020/05/30 03:10:34 .\sakura.exe
2020/05/30 03:09:00 .\sakura.exe.ini
2020/05/30 03:09:00 .\sakura.exe.manifest
2020/05/30 03:10:36 .\sakura_lang_en_US.dll
2021/07/10 17:28:58 .\unins000.dat
2021/07/10 17:27:08 .\unins000.exe
2020/05/30 03:09:00 .\keyword\ABAP4.kwd
2020/05/30 03:09:00 .\keyword\ActionScript.kwd
2020/05/30 03:09:00 .\keyword\AHK.col
2020/05/30 03:09:00 .\keyword\AHK.khp
2020/05/30 03:09:00 .\keyword\AHK.rkw
2020/05/30 03:09:00 .\keyword\wsh.kwd
2020/05/30 03:09:00 .\keyword\xul-attr.kwd
2020/05/30 03:09:00 .\keyword\xul.kwd
2020/05/30 03:08:58 .\license\LICENSE
2019/01/30 11:22:14 .\license\bregonig\bsd_license.txt
1999/11/24 02:29:36 .\license\bregonig\perl_license.txt
2006/08/23 15:01:00 .\license\bregonig\perl_license_jp.txt
2020/01/12 00:06:40 .\license\ctags\COPYING
2020/01/12 00:06:42 .\license\ctags\COPYING.MinGW-w64-runtime.txt
2020/01/12 00:06:42 .\license\ctags\Copyright.libxml2
2020/01/12 00:06:42 .\license\ctags\LICENSE.janssen
2020/01/12 00:06:42 .\license\ctags\LICENSE.libyaml
PS >
```

# 参考
リファレンス

https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-5.1

https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/get-date?view=powershell-5.1