PowerShell_ファイル入出力 †
ファイル(ディレクトリ)パス確認 †
ファイル(ディレクトリ)の存在確認 †
ファイル(ディレクトリ)パスが絶対(相対)パスかどうか確認 †
PS> Split-Path -Path C:\test.txt -IsAbsolute
True <- True:絶対パス、False:相対パス
ファイル(ディレクトリ)パスの最下層を取り出す †
PS> Split-Path -Path C:\test1\test2\test.txt -Leaf
test.txt
PS> Split-Path -Path C:\test1\test2 -Leaf
test2
ファイル(ディレクトリ)パスの親階層を取り出す †
PS> Split-Path -Path C:\test1\test2\test.txt -Parent
C:\test1\test2
PS> Split-Path -Path C:\test1\test2 -Parent
C:\test1
ファイル(ディレクトリ)パスの親階層を相対パスから絶対パスに変換する †
PS> Split-Path -Path .\test1\test2\test.txt -Parent
.\test1\test2 <- -Parentの場合は相対パスのまま
PS> Split-Path -Path .\test1\test2\test.txt -Resolve
C:\test1\test2 <- -Resolveの場合は絶対パスに変換する
ワイルドカードで指定されたパスを解釈する †
PS> Split-Path -Path C:\test1\*.txt -Leaf
*.txt
PS> Split-Path -Path C:\test1\*.txt -Leaf -Resolve
test.txt
test2.txt
ファイル(ディレクトリ)一覧取得 †
隠しファイルも表示(ls -la) †
PS> Get-ChildItem -Force
ファイル(ディレクトリ)のみ表示 †
PS> Get-ChildItem | Where-Object {$_.PSIsContainer} <- ディレクトリのみ
PS> Get-ChildItem | Where-Object {$_.Mode -match "d"} <- ディレクトリのみ
PS> Get-ChildItem | Where-Object {$_ -is [System.IO.DirectoryInfo]} <- ディレクトリのみ
PS> Get-ChildItem | Where-Object {-not $_.PSIsContainer} <- ファイルのみ
PS> Get-ChildItem | Where-Object {$_.Mode -notmatch "d"} <- ファイルのみ
PS> Get-ChildItem | Where-Object {$_ -is [System.IO.FileInfo]} <- ファイルのみ
最終更新時刻(降順)に表示(ls -lt) †
PS> Get-ChildItem | Sort-Object -Property LastWriteTime -Descending
ファイルサイズ(降順)に表示(ls -lSr) †
PS> Get-ChildItem | Sort-Object -Property Length -Descending
最終更新日が1年以上前のものを表示 †
PS> Get-ChildItem | Where-Object {$_.LastWriteTime -lt (Get-Date).AddYear(-1)}
拡張子が".txt"のファイルのみ表示 †
PS> Get-ChildItem | Where-Object {$_.Extension.ToLower() -eq ".txt"}
一意の拡張子を表示 †
PS> Get-ChildItem | Group-Object -Property Extension | Select-Object -Property Name
1つしかない拡張子のファイルを表示 †
PS> Get-ChildItem | Group-Object -Property Extension | Where-Object {$_.Count -eq 1} | Select-Object -Property Name
ファイル(ディレクトリ)名に"abc"が含まれているもののみ表示(ls -l *abc*) †
PS> Get-ChildItem | Where-Object {$_.Name -match "abc"}
特定の文字列を含むファイル名を表示 †
PS> Get-ChildItem | ForEach-Object ($_) {if (Select-String -Path $_.FullName -Pattern "abc") {Write-Host $_.FullName}}
読み取り専用ファイル(ディレクトリ)のみ表示 †
PS> Get-ChildItem | Where-Object {$_.Attributes -band [System.IO.FileAttributes]::ReadOnly}
PS> Get-ChildItem | Where-Object {$_.Attributes -match "ReadOnly"}
ジャンクション(リパースポイント)のみ表示 †
PS> Get-ChildItem -Force | Where-Object {$_.Attributes -match "ReparsePoint"}
ファイル読み取り †
通常の読み取り(type, cat) †
PS> Get-Content -Path C:\test.txt
ファイルの3行目から5行目まで読み取り †
PS> (Get-Content -Path C:\test.txt)[2..4]
ファイルの5行目以降最後まで読み取り †
PS> (Get-Content -Path C:\test.txt)[4..(Get-Content -Path C:\test.txt).Length]
ファイルの最初の3行を読み取り(head) †
PS> (Get-Content -Path C:\test.txt)[0..2]
ファイルの最後の3行を読み取り(tail) †
PS> (Get-Content -Path C:\test.txt)[-3..-1]
ファイルを逆順に読み取り(tac) †
PS> (Get-Content -Path C:\test.txt)[(Get-Content -Path C:\test.txt).Length..0]
改行を除いて、1つの文字列として読み取り †
PS> (Get-Content -Path C:\test.txt) -join "`r`n"
空白行を除いて読み取り †
PS> Get-Content -Path C:\test.txt | Where-Object {$_.trim()}
行の前後の空白を除いて読み取り †
PS> Get-Content -Path C:\test.txt | ForEach-Object {$_.trim()}
特定の文字列が含まれる行のみ読み取り(find, grep) †
PS> Select-String -Pattern "abc" -Path C:\test.txt
特定の日本語文字列が含まれる行のみ読み取り †
PS> Select-String -Pattern "日本語" -Path C:\test.txt -Encoding UTF-8 <- Default(システム既定のエンコード:日本語Windowsの場合Shift-JIS)なども可
マッチする行を周辺行とともに読み取り(grep -C) †
CSV(カンマ区切りテキスト)の読み取り †
PS> Import-Csv -Path C:\test.csv
PS> Get-Content -Path C:\test.csv | ConvertFrom-CSV <- 文字化け防止
TSV(タブ区切りテキスト)の読み取り †
PS> Import-Csv -Path C:\test.tsv -Delimiter "`t"
PS> Get-Content -Path C:\test.tsv | ConvertFrom-CSV -Delimiter "`t" <- 文字化け防止
ファイル書き込み †
上書きで書き込み †
PS> Get-Process | Out-File -FilePath C:\test.txt
追記で書き込み †
PS> Get-Process | Out-File -FilePath C:\test.txt -Append
読み取り専用ファイルへの書き込み †
PS> Get-Process | Out-File -FilePath C:\test.txt -Force
ファイルが存在した場合は、書き込まない †
PS> Get-Process | Out-File -FilePath C:\test.txt -NoClobber
UTF8形式のエンコーディングで書き込み †
PS> Get-Process | Out-File -FilePath C:\test.txt -Encoding UTF8 <- 既定はUnicode
ファイル(ディレクトリ)操作 †
コピー †
PS> Copy-Item -Path "C:\a.txt" -Destination "C:\Work"
- ディレクトリ全部(cp -r)
PS> Copy-Item -Path "C:\TestDirectory" -Destination "C:\Work" -Recurse
- コピー前確認(cp -i)
PS> Copy-Item -Path "C:\a.txt" -Destination "C:\Work" -Confirm
- カレントディレクトリにコピー(cp test.txt .)
PS> Copy-Item -Path "C:\test.txt"
- "*jpg"以外をコピー
PS> Copy-Item -Exclude "*.jpg" -Path "C:\" -Destination "C:\Work"
移動 †
PS> Move-Item
リネーム †
PS> Rename-Item
削除 †
ファイル属性 †
属性変更 †
所有者表示 †
PS> (Get-Acl -Path "C:\test.txt").Owner
所有者設定 †
PS> $A = New-Object System.Security.Principal.NTAccount("domainname", "username")
PS> Set-Acl -AclObject (Get-Acl -Path "C:\test.txt").SetOwner($A) -Path C:\test.txt