*PowerShell_ファイル入出力 [#id7c3641]
#contents
**ファイル(ディレクトリ)パス確認 [#j24c2b69]
***ファイル(ディレクトリ)の存在確認 [#d94b2e20]
-ファイルが存在するかどうか確認する
 PS> Test-Path -Path C:\test.txt -PathType Leaf
 True
-ディレクトリが存在するかどうか確認する
 PS> Test-Path -Path C:\test.txt -PathType Container
 True
***ファイル(ディレクトリ)パスが絶対(相対)パスかどうか確認 [#g322986e]
 PS> Split-Path -Path C:\test.txt -IsAbsolute
 True    <- True:絶対パス、False:相対パス
***ファイル(ディレクトリ)パスの最下層を取り出す [#g57d6ff9]
 PS> Split-Path -Path C:\test1\test2\test.txt -Leaf
 test.txt
 
 PS> Split-Path -Path C:\test1\test2 -Leaf
 test2
***ファイル(ディレクトリ)パスの親階層を取り出す [#ndbee0b4]
 PS> Split-Path -Path C:\test1\test2\test.txt -Parent
 C:\test1\test2
 
 PS> Split-Path -Path C:\test1\test2 -Parent
 C:\test1
***ファイル(ディレクトリ)パスの親階層を相対パスから絶対パスに変換する [#n8253e24]
 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の場合は絶対パスに変換する
***ワイルドカードで指定されたパスを解釈する [#r90ac806]
 PS> Split-Path -Path C:\test1\*.txt -Leaf
 *.txt
 
 PS> Split-Path -Path C:\test1\*.txt -Leaf -Resolve
 test.txt
 test2.txt


**ファイル(ディレクトリ)一覧取得 [#tb39d4f1]
***隠しファイルも表示(ls -la) [#l0b8d61f]
 PS> Get-ChildItem -Force
***ファイル(ディレクトリ)のみ表示 [#dcb00194]
 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) [#kdacb147]
 PS> Get-ChildItem | Sort-Object -Property LastWriteTime -Descending
***ファイルサイズ(降順)に表示(ls -lSr) [#vd1bd3b1]
 PS> Get-ChildItem | Sort-Object -Property Length -Descending
***最終更新日が1年以上前のものを表示 [#h2a0137e]
 PS> Get-ChildItem | Where-Object {$_.LastWriteTime -lt (Get-Date).AddYear(-1)}
***拡張子が".txt"のファイルのみ表示 [#pde175ca]
 PS> Get-ChildItem | Where-Object {$_.Extension.ToLower() -eq ".txt"}
***一意の拡張子を表示 [#n07cda74]
 PS> Get-ChildItem | Group-Object -Property Extension | Select-Object -Property Name
***1つしかない拡張子のファイルを表示 [#i9397a82]
 PS> Get-ChildItem | Group-Object -Property Extension | Where-Object {$_.Count -eq 1} | Select-Object -Property Name
***ファイル(ディレクトリ)名に"abc"が含まれているもののみ表示(ls -l *abc*) [#ua0dbcb2]
 PS> Get-ChildItem | Where-Object {$_.Name -match "abc"}
***特定の文字列を含むファイル名を表示 [#mc38e503]
 PS> Get-ChildItem | ForEach-Object ($_) {if (Select-String -Path $_.FullName -Pattern "abc") {Write-Host $_.FullName}}
***読み取り専用ファイル(ディレクトリ)のみ表示 [#m39214d9]
 PS> Get-ChildItem | Where-Object {$_.Attributes -band [System.IO.FileAttributes]::ReadOnly}
 PS> Get-ChildItem | Where-Object {$_.Attributes -match "ReadOnly"}
***ジャンクション(リパースポイント)のみ表示 [#o85df565]
 PS> Get-ChildItem -Force | Where-Object {$_.Attributes -match "ReparsePoint"}


**ファイル読み取り [#tb37d4cd]
***通常の読み取り(type, cat) [#v3a46f39]
 PS> Get-Content -Path C:\test.txt
***ファイルの3行目から5行目まで読み取り [#s8fa09e5]
 PS> (Get-Content -Path C:\test.txt)[2..4]
***ファイルの5行目以降最後まで読み取り [#f6d23b05]
 PS> (Get-Content -Path C:\test.txt)[4..(Get-Content -Path C:\test.txt).Length]
***ファイルの最初の3行を読み取り(head) [#pf6f4b26]
 PS> (Get-Content -Path C:\test.txt)[0..2]
***ファイルの最後の3行を読み取り(tail) [#lb4ebe5e]
 PS> (Get-Content -Path C:\test.txt)[-3..-1]
***ファイルを逆順に読み取り(tac) [#pfec1c33]
 PS> (Get-Content -Path C:\test.txt)[(Get-Content -Path C:\test.txt).Length..0]
***改行を除いて、1つの文字列として読み取り [#qf20102c]
 PS> (Get-Content -Path C:\test.txt) -join "`r`n"
***空白行を除いて読み取り [#h12129f2]
 PS> Get-Content -Path C:\test.txt | Where-Object {$_.trim()}
***行の前後の空白を除いて読み取り [#c5a8cb79]
 PS> Get-Content -Path C:\test.txt | ForEach-Object {$_.trim()}
***特定の文字列が含まれる行のみ読み取り(find, grep) [#ca3030d9]
 PS> Select-String -Pattern "abc" -Path C:\test.txt
***特定の日本語文字列が含まれる行のみ読み取り [#pe5f74af]
 PS> Select-String -Pattern "日本語" -Path C:\test.txt -Encoding UTF-8  <- Default(システム既定のエンコード:日本語Windowsの場合Shift-JIS)なども可
***マッチする行を周辺行とともに読み取り(grep -C) [#m978920c]
-"abc"にマッチする行とその前後2行を読み取り
 PS> Select-String -Pattern "abc" -Path C:\test.txt -Context 2
***CSV(カンマ区切りテキスト)の読み取り [#y3ee6454]
 PS> Import-Csv -Path C:\test.csv
 PS> Get-Content -Path C:\test.csv | ConvertFrom-CSV    <- 文字化け防止
***TSV(タブ区切りテキスト)の読み取り [#dba64de7]
 PS> Import-Csv -Path C:\test.tsv -Delimiter "`t"
 PS> Get-Content -Path C:\test.tsv | ConvertFrom-CSV -Delimiter "`t"    <- 文字化け防止


**ファイル書き込み [#nca27d9d]
***上書きで書き込み [#wc07fe51]
 PS> Get-Process | Out-File -FilePath C:\test.txt
***追記で書き込み [#bb6dcf53]
 PS> Get-Process | Out-File -FilePath C:\test.txt -Append
***読み取り専用ファイルへの書き込み [#o60e8f38]
 PS> Get-Process | Out-File -FilePath C:\test.txt -Force
***ファイルが存在した場合は、書き込まない [#y490dd4b]
 PS> Get-Process | Out-File -FilePath C:\test.txt -NoClobber
***UTF8形式のエンコーディングで書き込み [#g4e90763]
 PS> Get-Process | Out-File -FilePath C:\test.txt -Encoding UTF8    <- 既定はUnicode


**ファイル(ディレクトリ)操作 [#he6d92fe]
***コピー [#lb16a2f8]
 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"
***移動 [#l24a9166]
 PS> Move-Item
***リネーム [#i5be628e]
 PS> Rename-Item
***削除 [#t2ab1a06]
-C:ドライブ内の全てのJPGファイルを削除
 PS> Get-ChildItem -Path C:\ -Include "*.jpg" -Recurse | ForEach-Object ($_) {Remove-Item $_.FullName}


**ファイル属性 [#d51b7c69]
***属性変更 [#rc28c8de]
-読み取り専用属性設定(他の属性は削除)
 PS> Set-ItemProperty -Path test.txt Attributes ReadOnly
-読み取り専用属性設定(他の属性に追加)
 PS> Set-ItemProperty -Path test.txt -Name IsReadOnly -Value $True    <- $Falseで無効化
***所有者表示 [#vae39b17]
 PS> (Get-Acl -Path "C:\test.txt").Owner
***所有者設定 [#zd161f2b]
 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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS