PowerShellファイル操作

PowerShellファイル操作

ファイルの作成と削除

新規のファイル/フォルダを作成にはNew-Itemコマンドレットを用います。

itemTypeでファイルの種類を指定します。


PS> New-Item c:\tmp\itemized.csv -itemType File
PS> New-Item .\temp -itemType Directory

ファイル/フォルダの削除にはRemove-Itemコマンドレットを用います。


PS> Remove-Item c:\tmp\itemized.csv
PS> Remove-Item .\temp -Recurse -Force

ファイルのコピーと移動

ファイル/フォルダのコピーと移動は、Copy-Item/Move-Itemコマンドレットを用います。

「-Confirm」オプションを付与すると、コマンド実行是非を確認できます。


PS> Copy-Item -Confirm ".\datafile" ".\datafile.swap"
PS> Move-Item -force ".\datafile.swap" ".\datafile"

ファイルの存在を確認する

ファイルが存在するか確認するにはtest-patコマンドレットを用います。


$filepath = "datafile"
if( $(test-path $filepath) -ne $True ){
    Write-Error("ERROR: Not found " + $filepath)
    return($false)
}

PowerShellでのファイルの読み書き

ファイルの読み込み

ファイルの読み込みは、Get-Contentコマンドレットを用います。

Get-Contentの戻り値であるオブジェクトには様々なメソッドが用意されています。


$filepath = "datafile"
$contents = Get-Content $filepath
$contents | get-member

戻り値オブジェクトは配列として扱えますので、foreachで一行ずつアクセスできます。


$lines = get-content $filename
foreach($line in $lines){
  write-host("> $line")
}

また、ファイル内容を一行ずつ処理する場合にはForeach-Objectを利用できます。


Get-Content $filepath | Foreach-Object {
    echo $_
}

注意点は以下の通りです。

  • 日本語PowerShellの場合、Get-ContentはUTF16またはSJISのテキストファイルを読み取れる。
  • UTF16やSJIS以外のファイルを読み込むには「-Encoding」オプションで文字コードを指定する。
    • 指定出来る文字コードはUTF8やAscii等でEUC-JPやJISは指定出来ない。
    • -Encoding Defaultと指定するとSJISを指定する事になる。

ファイルへの書き込み

ファイルのへの書き込みは、Set-Contentコマンドレットを用います。

下記スクリプトは、ファイル($filepath)内の文字列$srcを文字列$destに置換し、.swapファイルに書き出した後に元ファイルにマージしています。


function replace_file_contents($filepath, $src, $dest)
{
   $ErrorActionPreference = "Stop"
    try{
        # ファイル内の文字列を置換する
        $buf = $(Get-Content $filepath) -replace $src, $dest

        # 一時ファイルに出力する
        Set-Content -Path "$filepath.swap" -Value $buf

        # 元ファイルに上書きする
        Move-Item -force "$filepath.swap" $filepath
    }catch{
        Write-Host($error)
    }

    return($true)
}

if($args.length -ne 3){
    Write-Error("ERROR: Invalid arguments.")
    exit $false
}
$rc = replace_file_contents $args[0] $args[1] $args[2]
exit $rc

ファイルへ追記

ファイルのへの追加書き込みは、Add-Contentコマンドレットを用います。


function append_parameter($filepath, $param)
{
    $ErrorActionPreference = "Stop"
    try{
        # 文字列をファイル末尾に追記する
        Add-Content $filepath $param
    }catch{
        Write-Host($error)
        return(1)
    }

    return(0)
}

関連ページ