はじめに
この記事は、Powershell の Get-ChildItem
をいろいろなパラメータを指定して実行してみた結果を貼り付けているだけの記事です。
こういう条件だとどうなるんだろう?と思いながらいろいろ試したので残します。
なお、ログ状態で放置していた期間が長いので投稿日時点でも鮮度低めです。
リファレンス
Get-ChildItem - Microsoft
実行環境
Windows 10
Powershell 5.1系
コマンド
1.パラメータなし
# 1.パラメータなし
Get-ChildItem
2.属性指定して取得
# 2-1.ファイルを取得
Get-ChildItem -File
# 2-2.ディレクトリを取得
Get-ChildItem -Directory
# 2-3.非表示を取得
Get-ChildItem -Hidden
# 2-4.読み取り専用を取得
Get-ChildItem -ReadOnly
# 2-5.非表示を含めて取得
Get-ChildItem -Force
3.再帰的に取得
# 3-1.再帰的に取得(非表示アイテムを含まず)
Get-ChildItem -Recurse
# 3-2.再帰的に取得(非表示アイテムを含む)
Get-ChildItem -Recurse -Force
# 3-3.再帰的に取得 1階層下まで
Get-ChildItem -Recurse -Depth 1
# 3-4.再帰的に取得 2階層下まで
Get-ChildItem -Recurse -Depth 2
# 3-5.再帰的に取得 0階層下まで = 直下のみ
Get-ChildItem -Recurse -Depth 0
4. パスを指定して取得
# 4-1.カレントディレクトリの "*.txt" を取得
Get-ChildItem -Path *.txt
# -Path は省略可能
Get-ChildItem *.txt
# 4-2.C:\work\Adir の一覧を取得
Get-ChildItem -Path C:\work\Adir
# 4-3.C:\work\Adirの"*.txt" ファイルを取得
Get-ChildItem -Path C:\work\Adir\*.txt
5. Include を使った取得
Include パラメーターを使用する場合、
パスに末尾アスタリスク(*
)のワイルドカードを指定する必要がある。
Recurse パラメーターをつける場合はパスの省略可能
A:Includeで後ろに *
# 5-1.出力なし
Get-ChildItem -Include "A*"
# 5-2.
# 該当あり
Get-ChildItem -Include "A*" -Path *
# 5-3.
# 該当あり
Get-ChildItem -Include "A*" -Recurse
# 5-4.
# 該当あり
Get-ChildItem -Path * -Include "A*" -Recurse
B:Includeで前に *
# 5-5.
# 該当なし
Get-ChildItem -Include "*.txt"
# 5-6.
# 該当あり
Get-ChildItem -Include "*.txt" -Recurse
# 5-7.
# 該当あり
Get-ChildItem -Path * -Include "*.txt"
# 5-8.
# 該当あり
Get-ChildItem -Path * -Include "*.txt" -Recurse
6. Exclude を使った取得
A:Excludeで後ろに *
# 6-1.
# 該当あり
Get-ChildItem -Exclude "A*"
# 6-2.
# 該当あり
Get-ChildItem -Exclude "A*" -Recurse
# 6-3.
# 該当あり
Get-ChildItem -Path * -Exclude "A*"
# 6-4.
# 該当あり、6-2.と同じ
Get-ChildItem -Path * -Exclude "A*" -Recurse
B:Excludeで前に *
# 6-5.
# 該当あり
Get-ChildItem -Exclude "*.txt"
# 6-6.
# 該当あり
Get-ChildItem -Exclude "*.txt" -Recurse
# 6-7.
# 該当あり
Get-ChildItem -Path * -Exclude "*.txt"
# 6-8.
# 該当あり、6-6.と同じ
Get-ChildItem -Path * -Exclude "*.txt" -Recurse
7.その他 絞り込み・加工など
※ここの実行結果は載せていない
取得情報を絞った一覧取得
# カレントディレクトリのファイル名を取得
Get-ChildItem -File -Name
Get-ChildItem -File -Recurse | ForEach-Object { $_.Name }
# サブディレクトリ内を含むファイルのフルパスを取得
Get-ChildItem -File -Recurse | ForEach-Object { $_.FullName }
取得対象を絞って一覧取得
# "*.txt" ファイルを取得
Get-ChildItem -File -Recurse *.txt
# 更新日時で絞込:2022/9/2 1:00:00 より新しいファイル
Get-ChildItem -File | ForEach-Object {if ($_.LastWriteTime -gt "2022/09/02 01:00:00") {$_}}
# ファイルサイズで絞込:1000 Byte 以上のファイル
Get-ChildItem -File | ForEach-Object {if ($_.Length -ge 1000) {$_}}
取得したファイルの属性変更
# ファイル名を変更
# "置換前" を "置換後" に置換した名前に変更
Get-ChildItem -File | Rename-Item -NewName { $_.Name -replace '置換前','置換後'}
# 更新日時を変更
Get-ChildItem -File | Set-ItemProperty -Name LastWriteTime -Value "2022/10/01 00:00:00"
# 作成日時を変更
Get-ChildItem -File | Set-ItemProperty -Name CreationTime -Value "2022/10/01 00:00:00"
コマンド実行結果
ファイル配置
コマンド実行結果は、以下の配置・属性で実施した結果
C:\work\
├- Adir\
│ ├- Asubdir\
│ │ ├- Asub2file.txt
│ │ └- file2.txt
│ ├- Asubfile.txt
│ └- file1.txt
├- Bdir\
│ ├- Bsubfile.txt
│ └- BsubHiddenfile.ini # 非表示
├- Cdir.txt\
│ ├- Cfile1.txt
│ └- Cfile2.txt
├- DHiddendir\ # 非表示
│ └- Dsubfile.txt
├- AFILE.INI
├- AFILE.TXT
├- BFile.ps1
├- BFile.txt
├- BHiddenFile.ini # 非表示
├- CFile
├- CFile.txt
└- CReadonlyFile.INI # 読み取り専用
PS C:\work> Get-ChildItem -Recurse -Force | % {
echo ( "{0} {1:yyyy/MM/dd HH:mm:ss} {2,6} {3}" `
-f $_.Mode, $_.LastWriteTime, $_.Length, $_.FullName )
}
d----- 2022/11/20 14:05:20 1 C:\work\Adir
d----- 2022/11/20 12:04:28 1 C:\work\Bdir
d----- 2022/11/20 11:29:14 1 C:\work\Cdir.txt
d--h-- 2022/11/20 12:16:23 1 C:\work\DHiddendir
-a---- 2022/11/20 11:19:51 2980 C:\work\AFILE.INI
-a---- 2021/07/10 15:48:06 58122 C:\work\AFILE.TXT
-a---- 2022/11/20 11:14:10 4236 C:\work\BFile.ps1
-a---- 2022/11/20 11:03:15 0 C:\work\BFile.txt
-a-h-- 2022/11/10 02:10:41 2838 C:\work\BHiddenFile.ini
-a---- 2022/11/20 11:10:47 7950 C:\work\CFile
-a---- 2022/11/20 11:26:28 1860 C:\work\CFile.txt
-ar--- 2022/11/20 11:19:51 2980 C:\work\CReadonlyFile.INI
d----- 2022/11/20 14:05:23 1 C:\work\Adir\Asubdir
-a---- 2022/11/20 11:26:57 426 C:\work\Adir\Asub1file.txt
-a---- 2022/11/20 11:26:57 426 C:\work\Adir\file1.txt
-a---- 2022/11/20 11:03:15 0 C:\work\Adir\Asubdir\Asub2file.txt
-a---- 2022/11/20 11:26:57 426 C:\work\Adir\Asubdir\file2.txt
-a---- 2022/11/20 11:27:13 280 C:\work\Bdir\Bsubfile.txt
-a-h-- 2022/11/20 11:03:15 0 C:\work\Bdir\BsubHiddenfile.ini
-a---- 2022/11/20 11:28:15 548 C:\work\Cdir.txt\Cfile1.txt
-a---- 2022/11/20 11:27:35 601 C:\work\Cdir.txt\Cfile2.txt
-a---- 2022/11/20 11:27:13 280 C:\work\DHiddendir\Dsubfile.txt
PS C:\work>
1. 条件指定なし
# 1.カレントディレクトリのファイル・ディレクトリ一覧を取得
Get-ChildItem
- 1.カレントディレクトリのファイル・ディレクトリ一覧を取得
PS C:\work> Get-ChildItem
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Adir
d----- 2022/11/20 12:04 Bdir
d----- 2022/11/20 11:29 Cdir.txt
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2021/07/10 15:48 58122 AFILE.TXT
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:10 7950 CFile
-a---- 2022/11/20 11:26 1860 CFile.txt
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
PS C:\work>
2. 種類・属性を指定して取得
取得対象(アイテムの種類・属性)を指定して一覧取得
# 2-1.ファイルのみを取得
Get-ChildItem -File
# 2-2.ディレクトリのみを取得
Get-ChildItem -Directory
# 2-3.非表示のみを取得
Get-ChildItem -Hidden
# 2-4.読み取り専用のみを取得
Get-ChildItem -ReadOnly
# 2-5.非表示を含むファイル・ディレクトリ一覧を取得
Get-ChildItem -Force
- 2-1.ファイルのみを取得
PS C:\work> Get-ChildItem -File
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2021/07/10 15:48 58122 AFILE.TXT
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:10 7950 CFile
-a---- 2022/11/20 11:26 1860 CFile.txt
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
PS C:\work>
- 2-2.ディレクトリのみを取得
PS C:\work> Get-ChildItem -Directory
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Adir
d----- 2022/11/20 12:04 Bdir
d----- 2022/11/20 11:29 Cdir.txt
PS C:\work>
- 2-3.非表示のみを取得
PS C:\work> Get-ChildItem -Hidden
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d--h-- 2022/11/20 12:16 DHiddendir
-a-h-- 2022/11/10 2:10 2838 BHiddenFile.ini
PS C:\work>
- 2-4.読み取り専用のみを取得
PS C:\work> Get-ChildItem -ReadOnly
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
PS C:\work>
- 2-5.非表示を含むファイル・ディレクトリ一覧を取得
PS C:\work> Get-ChildItem -Force
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Adir
d----- 2022/11/20 12:04 Bdir
d----- 2022/11/20 11:29 Cdir.txt
d--h-- 2022/11/20 12:16 DHiddendir
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2021/07/10 15:48 58122 AFILE.TXT
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:03 0 BFile.txt
-a-h-- 2022/11/10 2:10 2838 BHiddenFile.ini
-a---- 2022/11/20 11:10 7950 CFile
-a---- 2022/11/20 11:26 1860 CFile.txt
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
PS C:\work>
3.再帰的に取得
取得範囲(アイテムのパス)を指定して取得する
# 3-1.再帰的に取得(非表示アイテムを含まず)
Get-ChildItem -Recurse
# 3-2.再帰的に取得(非表示アイテムを含む)
Get-ChildItem -Recurse -Force
# 3-3.再帰的に取得 1階層下まで
Get-ChildItem -Recurse -Depth 1
# 3-4.再帰的に取得 2階層下まで
Get-ChildItem -Recurse -Depth 2
# 3-5.再帰的に取得 0階層下まで = 直下のみ
Get-ChildItem -Recurse -Depth 0
- 3-1.再帰的に取得(非表示アイテムを含まず)
PS C:\work> Get-ChildItem -Recurse
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Adir
d----- 2022/11/20 12:04 Bdir
d----- 2022/11/20 11:29 Cdir.txt
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2021/07/10 15:48 58122 AFILE.TXT
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:10 7950 CFile
-a---- 2022/11/20 11:26 1860 CFile.txt
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Asubdir
-a---- 2022/11/20 11:26 426 Asub1file.txt
-a---- 2022/11/20 11:26 426 file1.txt
ディレクトリ: C:\work\Adir\Asubdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:03 0 Asub2file.txt
-a---- 2022/11/20 11:26 426 file2.txt
ディレクトリ: C:\work\Bdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:27 280 Bsubfile.txt
ディレクトリ: C:\work\Cdir.txt
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:28 548 Cfile1.txt
-a---- 2022/11/20 11:27 601 Cfile2.txt
PS C:\work>
- 3-2.再帰的に取得(非表示アイテムを含む)
PS C:\work> Get-ChildItem -Recurse -Force
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Adir
d----- 2022/11/20 12:04 Bdir
d----- 2022/11/20 11:29 Cdir.txt
d--h-- 2022/11/20 12:16 DHiddendir
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2021/07/10 15:48 58122 AFILE.TXT
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:03 0 BFile.txt
-a-h-- 2022/11/10 2:10 2838 BHiddenFile.ini
-a---- 2022/11/20 11:10 7950 CFile
-a---- 2022/11/20 11:26 1860 CFile.txt
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Asubdir
-a---- 2022/11/20 11:26 426 Asub1file.txt
-a---- 2022/11/20 11:26 426 file1.txt
ディレクトリ: C:\work\Adir\Asubdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:03 0 Asub2file.txt
-a---- 2022/11/20 11:26 426 file2.txt
ディレクトリ: C:\work\Bdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:27 280 Bsubfile.txt
-a-h-- 2022/11/20 11:03 0 BsubHiddenfile.ini
ディレクトリ: C:\work\Cdir.txt
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:28 548 Cfile1.txt
-a---- 2022/11/20 11:27 601 Cfile2.txt
ディレクトリ: C:\work\DHiddendir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:27 280 Dsubfile.txt
PS C:\work>
- 3-3.再帰的に取得 1階層下まで
2階層下 C:\work\Adir\Asubdir
内のファイルは表示されない
PS C:\work> Get-ChildItem -Recurse -Depth 1
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Adir
d----- 2022/11/20 12:04 Bdir
d----- 2022/11/20 11:29 Cdir.txt
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2021/07/10 15:48 58122 AFILE.TXT
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:10 7950 CFile
-a---- 2022/11/20 11:26 1860 CFile.txt
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Asubdir
-a---- 2022/11/20 11:26 426 Asub1file.txt
-a---- 2022/11/20 11:26 426 file1.txt
ディレクトリ: C:\work\Bdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:27 280 Bsubfile.txt
ディレクトリ: C:\work\Cdir.txt
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:28 548 Cfile1.txt
-a---- 2022/11/20 11:27 601 Cfile2.txt
PS C:\work>
- 3-4.再帰的に取得 2階層下まで
2階層下 C:\work\Adir\Asubdir
内のファイルも表示される
PS C:\work> Get-ChildItem -Recurse -Depth 2
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Adir
d----- 2022/11/20 12:04 Bdir
d----- 2022/11/20 11:29 Cdir.txt
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2021/07/10 15:48 58122 AFILE.TXT
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:10 7950 CFile
-a---- 2022/11/20 11:26 1860 CFile.txt
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Asubdir
-a---- 2022/11/20 11:26 426 Asub1file.txt
-a---- 2022/11/20 11:26 426 file1.txt
ディレクトリ: C:\work\Adir\Asubdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:03 0 Asub2file.txt
-a---- 2022/11/20 11:26 426 file2.txt
ディレクトリ: C:\work\Bdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:27 280 Bsubfile.txt
ディレクトリ: C:\work\Cdir.txt
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:28 548 Cfile1.txt
-a---- 2022/11/20 11:27 601 Cfile2.txt
PS C:\work>
- 3-5.再帰的に取得 0階層下まで
直下のみ表示される(-Recurse
なしと同じ)
PS C:\work> Get-ChildItem -Recurse -Depth 0
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Adir
d----- 2022/11/20 12:04 Bdir
d----- 2022/11/20 11:29 Cdir.txt
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2021/07/10 15:48 58122 AFILE.TXT
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:10 7950 CFile
-a---- 2022/11/20 11:26 1860 CFile.txt
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
PS C:\work>
4. パスを指定して取得
# 4-1.カレントディレクトリの "*.txt" を取得
Get-ChildItem -Path *.txt
# -Path は省略可能なため、以下の書き方でも同じ
Get-ChildItem *.txt
# 4-2.C:\work\Adir の一覧を取得
Get-ChildItem -Path C:\work\Adir
# -Path は省略可能なため、以下の書き方でも同じ
Get-ChildItem C:\work\Adir
# 4-3.C:\work\Adirの"*.txt" ファイルを取得
Get-ChildItem -Path C:\work\Adir\*.txt
# -Path は省略可能なため、以下の書き方でも同じ
Get-ChildItem C:\work\Adir\*.txt
- 4-1.カレントディレクトリの
*.txt
を取得
PS C:\work> Get-ChildItem -Path *.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 11:29 Cdir.txt
-a---- 2021/07/10 15:48 58122 AFILE.TXT
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:26 1860 CFile.txt
PS C:\work>
- 4-2.
C:\work\Adir
の一覧を取得
PS C:\work> Get-ChildItem -Path C:\work\Adir
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Asubdir
-a---- 2022/11/20 11:26 426 Asub1file.txt
-a---- 2022/11/20 11:26 426 file1.txt
PS C:\work>
- 4-3.
C:\work\Adir
の*.txt
ファイルを取得
PS C:\work> Get-ChildItem -Path C:\work\Adir\*.txt
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:26 426 Asub1file.txt
-a---- 2022/11/20 11:26 426 file1.txt
PS C:\work>
5. Include を使った取得
Include パラメーターを使用する場合、
パスに末尾アスタリスク(*
)のワイルドカードを指定する必要がある。
Recurse パラメーターをつける場合はパスの省略可能
A:Includeで後ろに *
# 5-1.
# 該当なし
Get-ChildItem -Include "A*"
# 5-2.
# 該当あり
Get-ChildItem -Include "A*" -Recurse
# 5-3.
# 該当あり
Get-ChildItem -Path * -Include "A*"
# 5-4.
# 該当あり
Get-ChildItem -Path * -Include "A*" -Recurse
No | Include | Path | Recurse | 結果 |
---|---|---|---|---|
1 | A* | - | - | なし |
2 | A* | - | x | あり (6件) |
3 | A* | * | x | あり (4件) |
4 | A* | * | x | あり (5件) |
【凡例】 -:指定なし x:指定あり その他:指定値
- 5-1
PS C:\work> Get-ChildItem -Include "A*"
PS C:\work>
→ Path で末尾アスタリスク、Recurse どちらも指定してないため出力なし
- 5-2
PS C:\work> Get-ChildItem -Include "A*" -Recurse
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Adir
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Asubdir
ディレクトリ: C:\work\Adir\Asubdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:03 0 Asub2file.txt
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:26 426 Asub1file.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2021/07/10 15:48 58122 AFILE.TXT
PS C:\work>
- 5-3
PS C:\work> Get-ChildItem -Path * -Include "A*"
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Asubdir
-a---- 2022/11/20 11:26 426 Asub1file.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2021/07/10 15:48 58122 AFILE.TXT
PS C:\work>
- 5-4
PS C:\work> Get-ChildItem -Path * -Include "A*" -Recurse
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Asubdir
ディレクトリ: C:\work\Adir\Asubdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:03 0 Asub2file.txt
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:26 426 Asub1file.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2021/07/10 15:48 58122 AFILE.TXT
PS C:\work>
結果比較
一覧(フルパス)表示で、パラメータを変えて結果がどう変わっているかを確認
-Path *
指定のみ
PS C:\work> Get-ChildItem -Path * -Include "A*" `
| % { echo ( "{0} {1}" -f $_.Mode, $_.FullName ) }
d----- C:\work\Adir\Asubdir
-a---- C:\work\Adir\Asub1file.txt
-a---- C:\work\AFILE.INI
-a---- C:\work\AFILE.TXT
PS C:\work>
↓ -Recurse
を追加すると
PS C:\work> Get-ChildItem -Path * -Include "A*" -Recurse `
| % { echo ( "{0} {1}" -f $_.Mode, $_.FullName ) }
d----- C:\work\Adir\Asubdir
-a---- C:\work\Adir\Asubdir\Asub2file.txt ★これが増えた
-a---- C:\work\Adir\Asub1file.txt
-a---- C:\work\AFILE.INI
-a---- C:\work\AFILE.TXT
PS C:\work>
↓ -Path *
指定を外すと(-Recurse
だけにすると)
PS C:\work> Get-ChildItem -Include "A*" -Recurse `
| % { echo ( "{0} {1}" -f $_.Mode, $_.FullName ) }
d----- C:\work\Adir ★これが増えた
d----- C:\work\Adir\Asubdir
-a---- C:\work\Adir\Asubdir\Asub2file.txt
-a---- C:\work\Adir\Asub1file.txt
-a---- C:\work\AFILE.INI
-a---- C:\work\AFILE.TXT
PS C:\work>
B:Includeで前に *
# 5-5.
# 該当なし
Get-ChildItem -Include "*.txt"
# 5-6.
# 該当あり
Get-ChildItem -Include "*.txt" -Recurse
# 5-7.
# 該当あり
Get-ChildItem -Path * -Include "*.txt"
# 5-8.
# 該当あり
Get-ChildItem -Path * -Include "*.txt" -Recurse
No | Include | Path | Recurse | 結果 |
---|---|---|---|---|
5 | *.txt | - | - | なし |
6 | *.txt | - | x | あり (11件) |
7 | *.txt | * | - | あり (5件) |
8 | *.txt | * | x | あり (10件) |
【凡例】 -:指定なし x:指定あり その他:指定値
- 5-5
PS C:\work> Get-ChildItem -Include "*.txt"
PS C:\work>
→ Path で末尾アスタリスク、Recurse どちらも指定してないため出力なし
- 5-6
PS C:\work> Get-ChildItem -Include "*.txt" -Recurse
ディレクトリ: C:\work\Adir\Asubdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:03 0 Asub2file.txt
-a---- 2022/11/20 11:26 426 file2.txt
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:26 426 Asub1file.txt
-a---- 2022/11/20 11:26 426 file1.txt
ディレクトリ: C:\work\Bdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:27 280 Bsubfile.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 11:29 Cdir.txt
ディレクトリ: C:\work\Cdir.txt
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:28 548 Cfile1.txt
-a---- 2022/11/20 11:27 601 Cfile2.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2021/07/10 15:48 58122 AFILE.TXT
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:26 1860 CFile.txt
PS C:\work>
- 5-7
PS C:\work> Get-ChildItem -Path * -Include "*.txt"
ディレクトリ: C:\work\Cdir.txt
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:28 548 Cfile1.txt
-a---- 2022/11/20 11:27 601 Cfile2.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2021/07/10 15:48 58122 AFILE.TXT
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:26 1860 CFile.txt
PS C:\work>
- 5-8
PS C:\work> Get-ChildItem -Path * -Include "*.txt" -Recurse
ディレクトリ: C:\work\Adir\Asubdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:03 0 Asub2file.txt
-a---- 2022/11/20 11:26 426 file2.txt
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:26 426 Asub1file.txt
-a---- 2022/11/20 11:26 426 file1.txt
ディレクトリ: C:\work\Bdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:27 280 Bsubfile.txt
ディレクトリ: C:\work\Cdir.txt
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:28 548 Cfile1.txt
-a---- 2022/11/20 11:27 601 Cfile2.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2021/07/10 15:48 58122 AFILE.TXT
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:26 1860 CFile.txt
PS C:\work>
結果比較
一覧(フルパス)表示で、パラメータを変えて結果がどう変わっているかを確認
-Path *
指定のみ
PS C:\work> Get-ChildItem -Path * -Include "*.txt" `
| % { echo ( "{0} {1}" -f $_.Mode, $_.FullName ) }
-a---- C:\work\Cdir.txt\Cfile1.txt
-a---- C:\work\Cdir.txt\Cfile2.txt
-a---- C:\work\AFILE.TXT
-a---- C:\work\BFile.txt
-a---- C:\work\CFile.txt
PS C:\work>
↓ -Recurse
を追加すると
PS C:\work> Get-ChildItem -Path * -Include "*.txt" -Recurse `
| % { echo ( "{0} {1}" -f $_.Mode, $_.FullName ) }
-a---- C:\work\Adir\Asubdir\Asub2file.txt ★これが増えた
-a---- C:\work\Adir\Asubdir\file2.txt ★これが増えた
-a---- C:\work\Adir\Asub1file.txt ★これが増えた
-a---- C:\work\Adir\file1.txt ★これが増えた
-a---- C:\work\Bdir\Bsubfile.txt ★これが増えた
-a---- C:\work\Cdir.txt\Cfile1.txt
-a---- C:\work\Cdir.txt\Cfile2.txt
-a---- C:\work\AFILE.TXT
-a---- C:\work\BFile.txt
-a---- C:\work\CFile.txt
PS C:\work>
↓ -Path *
指定を外すと(-Recurse
だけにすると)
PS C:\work> Get-ChildItem -Include "*.txt" -Recurse `
| % { echo ( "{0} {1}" -f $_.Mode, $_.FullName ) }
-a---- C:\work\Adir\Asubdir\Asub2file.txt
-a---- C:\work\Adir\Asubdir\file2.txt
-a---- C:\work\Adir\Asub1file.txt
-a---- C:\work\Adir\file1.txt
-a---- C:\work\Bdir\Bsubfile.txt
d----- C:\work\Cdir.txt ★これが増えた
-a---- C:\work\Cdir.txt\Cfile1.txt
-a---- C:\work\Cdir.txt\Cfile2.txt
-a---- C:\work\AFILE.TXT
-a---- C:\work\BFile.txt
-a---- C:\work\CFile.txt
PS C:\work>
6. Exclude を使った取得
A:Excludeで後ろに *
# 6-1.
# 該当あり
Get-ChildItem -Exclude "A*"
# 6-2.
# 該当あり
Get-ChildItem -Exclude "A*" -Recurse
# 6-3.
# 該当あり
Get-ChildItem -Path * -Exclude "A*"
# 6-4.
# 該当あり、6-2.と同じ
Get-ChildItem -Path * -Exclude "A*" -Recurse
- 6-1
PS C:\work> Get-ChildItem -Exclude "A*"
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 12:04 Bdir
d----- 2022/11/20 11:29 Cdir.txt
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:10 7950 CFile
-a---- 2022/11/20 11:26 1860 CFile.txt
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
PS C:\work>
【参考】一覧(フルパス)表示版
PS C:\work> Get-ChildItem -Exclude "A*" `
>> | % { echo ( "{0} {1}" -f $_.Mode, $_.FullName ) }
>>
d----- C:\work\Bdir
d----- C:\work\Cdir.txt
-a---- C:\work\BFile.ps1
-a---- C:\work\BFile.txt
-a---- C:\work\CFile
-a---- C:\work\CFile.txt
-ar--- C:\work\CReadonlyFile.INI
PS C:\work>
- 6-2
PS C:\work> Get-ChildItem -Exclude "A*" -Recurse
ディレクトリ: C:\work\Adir\Asubdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:26 426 file2.txt
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:26 426 file1.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 12:04 Bdir
ディレクトリ: C:\work\Bdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:27 280 Bsubfile.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 11:29 Cdir.txt
ディレクトリ: C:\work\Cdir.txt
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:28 548 Cfile1.txt
-a---- 2022/11/20 11:27 601 Cfile2.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:10 7950 CFile
-a---- 2022/11/20 11:26 1860 CFile.txt
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
PS C:\work>
【参考】一覧(フルパス)表示版
PS C:\work> Get-ChildItem -Exclude "A*" -Recurse `
>> | % { echo ( "{0} {1}" -f $_.Mode, $_.FullName ) }
>>
-a---- C:\work\Adir\Asubdir\file2.txt
-a---- C:\work\Adir\file1.txt
d----- C:\work\Bdir
-a---- C:\work\Bdir\Bsubfile.txt
d----- C:\work\Cdir.txt
-a---- C:\work\Cdir.txt\Cfile1.txt
-a---- C:\work\Cdir.txt\Cfile2.txt
-a---- C:\work\BFile.ps1
-a---- C:\work\BFile.txt
-a---- C:\work\CFile
-a---- C:\work\CFile.txt
-ar--- C:\work\CReadonlyFile.INI
PS C:\work>
- 6-3
PS C:\work> Get-ChildItem -Path * -Exclude "A*"
ディレクトリ: C:\work\Bdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:27 280 Bsubfile.txt
ディレクトリ: C:\work\Cdir.txt
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:28 548 Cfile1.txt
-a---- 2022/11/20 11:27 601 Cfile2.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:10 7950 CFile
-a---- 2022/11/20 11:26 1860 CFile.txt
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
PS C:\work>
【参考】一覧(フルパス)表示版
PS C:\work> Get-ChildItem -Path * -Exclude "A*" `
>> | % { echo ( "{0} {1}" -f $_.Mode, $_.FullName ) }
>>
-a---- C:\work\Bdir\Bsubfile.txt
-a---- C:\work\Cdir.txt\Cfile1.txt
-a---- C:\work\Cdir.txt\Cfile2.txt
-a---- C:\work\BFile.ps1
-a---- C:\work\BFile.txt
-a---- C:\work\CFile
-a---- C:\work\CFile.txt
-ar--- C:\work\CReadonlyFile.INI
PS C:\work>
- 6-4
PS C:\work> Get-ChildItem -Path * -Exclude "A*" -Recurse
>>
ディレクトリ: C:\work\Adir\Asubdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:26 426 file2.txt
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:26 426 file1.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 12:04 Bdir
ディレクトリ: C:\work\Bdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:27 280 Bsubfile.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 11:29 Cdir.txt
ディレクトリ: C:\work\Cdir.txt
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:28 548 Cfile1.txt
-a---- 2022/11/20 11:27 601 Cfile2.txt
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:03 0 BFile.txt
-a---- 2022/11/20 11:10 7950 CFile
-a---- 2022/11/20 11:26 1860 CFile.txt
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
PS C:\work>
【参考】一覧(フルパス)表示版
PS C:\work> Get-ChildItem -Path * -Exclude "A*" -Recurse `
>> | % { echo ( "{0} {1}" -f $_.Mode, $_.FullName ) }
>>
-a---- C:\work\Adir\Asubdir\file2.txt
-a---- C:\work\Adir\file1.txt
d----- C:\work\Bdir
-a---- C:\work\Bdir\Bsubfile.txt
d----- C:\work\Cdir.txt
-a---- C:\work\Cdir.txt\Cfile1.txt
-a---- C:\work\Cdir.txt\Cfile2.txt
-a---- C:\work\BFile.ps1
-a---- C:\work\BFile.txt
-a---- C:\work\CFile
-a---- C:\work\CFile.txt
-ar--- C:\work\CReadonlyFile.INI
PS C:\work>
B:Excludeで前に *
# 6-5.
# 該当あり
Get-ChildItem -Exclude "*.txt"
# 6-6.
# 該当あり
Get-ChildItem -Exclude "*.txt" -Recurse
# 6-7.
# 該当あり
Get-ChildItem -Path * -Exclude "*.txt"
# 6-8.
# 該当あり、6-6.と同じ
Get-ChildItem -Path * -Exclude "*.txt" -Recurse
- 6-5
PS C:\work> Get-ChildItem -Exclude "*.txt"
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Adir
d----- 2022/11/20 12:04 Bdir
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:10 7950 CFile
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
PS C:\work>
- 6-6
PS C:\work> Get-ChildItem -Exclude "*.txt" -Recurse
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Adir
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Asubdir
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 12:04 Bdir
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:10 7950 CFile
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
PS C:\work>
- 6-7
PS C:\work> Get-ChildItem -Path * -Exclude "*.txt"
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Asubdir
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:10 7950 CFile
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
PS C:\work>
- 6-8
PS C:\work> Get-ChildItem -Path * -Exclude "*.txt" -Recurse
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Adir
ディレクトリ: C:\work\Adir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 14:05 Asubdir
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/11/20 12:04 Bdir
-a---- 2022/11/20 11:19 2980 AFILE.INI
-a---- 2022/11/20 11:14 4236 BFile.ps1
-a---- 2022/11/20 11:10 7950 CFile
-ar--- 2022/11/20 11:19 2980 CReadonlyFile.INI
PS C:\work>
覚書・補足
戻り値の型とプロパティ
Get-ChildItem
の戻り値の型は、
取得したアイテムがファイルの場合とディレクトリの場合で異なる。
- ファイルの場合:
FileInfo
型 - ディレクトリの場合:
DirectoryInfo
型
該当したファイル・ディレクトリが複数の場合、配列型となり、
各要素がFileInfo
型またはDirectoryInfo
型となる。
ファイルの場合
PS C:\work> $files = Get-ChildItem -File
PS C:\work> $files.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS > $files[0].GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True FileInfo System.IO.FileSystemInfo
PS C:\work> $files[0] | Get-Member -MemberType Property
TypeName: System.IO.FileInfo
Name MemberType Definition
---- ---------- ----------
Attributes Property System.IO.FileAttributes Attributes {get;set;}
CreationTime Property datetime CreationTime {get;set;}
CreationTimeUtc Property datetime CreationTimeUtc {get;set;}
Directory Property System.IO.DirectoryInfo Directory {get;}
DirectoryName Property string DirectoryName {get;}
Exists Property bool Exists {get;}
Extension Property string Extension {get;}
FullName Property string FullName {get;}
IsReadOnly Property bool IsReadOnly {get;set;}
LastAccessTime Property datetime LastAccessTime {get;set;}
LastAccessTimeUtc Property datetime LastAccessTimeUtc {get;set;}
LastWriteTime Property datetime LastWriteTime {get;set;}
LastWriteTimeUtc Property datetime LastWriteTimeUtc {get;set;}
Length Property long Length {get;}
Name Property string Name {get;}
PS C:\work>
ディレクトリの場合
PS C:\work> $files = Get-ChildItem -Directory
PS C:\work> $files.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS > $files[0].GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True DirectoryInfo System.IO.FileSystemInfo
PS C:\work> $files[0] | Get-Member -MemberType Property
TypeName: System.IO.DirectoryInfo
Name MemberType Definition
---- ---------- ----------
Attributes Property System.IO.FileAttributes Attributes {get;set;}
CreationTime Property datetime CreationTime {get;set;}
CreationTimeUtc Property datetime CreationTimeUtc {get;set;}
Exists Property bool Exists {get;}
Extension Property string Extension {get;}
FullName Property string FullName {get;}
LastAccessTime Property datetime LastAccessTime {get;set;}
LastAccessTimeUtc Property datetime LastAccessTimeUtc {get;set;}
LastWriteTime Property datetime LastWriteTime {get;set;}
LastWriteTimeUtc Property datetime LastWriteTimeUtc {get;set;}
Name Property string Name {get;}
Parent Property System.IO.DirectoryInfo Parent {get;}
Root Property System.IO.DirectoryInfo Root {get;}
PS C:\work>
エイリアス
Powershellのコマンドは意味が分かりやすいが、その反面、
打つとなると長くて面倒だったりするのでエイリアスを使う。
Get-ChildItem
dir
gci
-
ls
(windowsのみ)
その他
このページで使っているもの
ForEach-Object
のエイリアス
%
foreach
Set-ItemProperty
のエイリアス
sp
よく使うコマンド
ls -Name
ls -R | % {$_.FullName}
ls -File -R | % {$_.FullName}