トッカンソフトウェア

PowerShell ファイル関連



PowerShellのファイルの入出力をまとめます。 ■サンプル:ファイルを読み込み、ループでまわす
				
#読み込むファイルパス
$readPath = "C:\work\powershell\read.txt"

#ファイルの読み込み
$readAry = (Get-Content $readPath) -as [string[]]

#ファイル中身でループ
foreach($readStr in $readAry){

    #ファイルの内容出力
    echo $readStr;
}

			


■サンプル:配列をファイルに書き込む
				
#出力するファイルパス
$writePath = "C:\work\powershell\write.txt"

#出力する配列定義
$writeAry = "aaa","bbb","","ccc"

#出力処理(上書き)
$writeAry | Out-File $writePath -encoding UTF8

#出力処理(追記)
"ddd" | Out-File $writePath -encoding UTF8 -Append

			


■サンプル:UTF-8 BOMなしでファイル出力
				
$data = "UTF-8 BOMなしで出力"
$path = "C:\tmp\test.txt"
$UTF8 = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($path, $data, $UTF8)

			


■サンプル:UTF-8 ファイル読み込み
				
$path = "C:\tmp\test.txt"
Get-Content -Encoding UTF8 $path

			


■サンプル:ファイルを読み込んで、(編集して)出力する
				
#読み込むファイルパス
$readPath = "C:\work\powershell\read.txt"

#出力するファイルパス
$writePath = "C:\work\powershell\write.txt"

#ファイルの読み込み
$readAry = (Get-Content $readPath) -as [string[]]

#出力する配列定義
$writeAry = @()

#ファイル中身でループ
foreach($readStr in $readAry){

    #ファイルの内容出力(ここで編集する)
    $writeAry += $readStr;
}

#出力処理
$writeAry | Out-File $writePath -encoding UTF8

			


■サンプル:フォルダ作成、ファイル作成
				
#フォルダ作成
New-Item c:\new1\new2 -itemType Directory

#フォルダ削除
Remove-Item c:\new1\new2 -Recurse

#ファイル作成
New-Item c:\new1\new2\new3.dat -itemType File -Value "ファイルの内容"

#ファイル削除
Remove-Item c:\new1\new2\*.txt

			
フォルダ作成は親フォルダも作ってくれます。

■サンプル:ファイルコピー、ファイル移動
				
#ファイルコピー
Copy-Item C:\tmp\from.txt C:\tmp\to1.txt

#ファイル移動
Move-Item C:\tmp\from.txt C:\tmp\to2.txt

			


■サンプル:カレントディレクトリ取得、パスの結合
				
#カレントディレクトリ取得
$path = Get-Location

#パスの結合
$fullPath = Join-Path $path "read.txt"

echo $fullPath

			


■サンプル:ファイル(フォルダ存在チェック)
				
$path = "C:\tmp\appp.log";

#ファイル存在チェック
if(Test-Path $path){
    echo "ファイルが存在";
}

			
同じ書き方でファイル、フォルダの存在チェックができます。

■サンプル:ファイル一覧
				
#フォルダ指定
$path = "C:\work\powershell"

#ファイル一覧を取得
$fileList = Get-ChildItem -Path $path -Recurse  -Filter *.txt -Exclude t*

#ファイル毎にループする
foreach($fileWk in $fileList)
{
    #フルパス
    echo $fileWk.FullName
    #ファイル名
    echo $fileWk.Name
    #更新日
    echo $fileWk.LastWriteTime.ToString('yyyy/MM/dd HH:mm:ss')
}

#7日前より前に更新されたファイル一覧
$fileList2 = Get-ChildItem -Path $path -Recurse | Where-Object {$_.LastAccessTime -lt (Get-Date).AddDays(-7)}

			
オプション 説明
-Path パスを指定
-Filter フィルター
-Exclude 除外
-Recurse サブフォルダがあれば再帰的に処理
-File ファイル
-Directory ディレクトリ

Where-Object で細かく条件を指定することができる。


■サンプル:ファイルの属性取得
				
$path = "C:\work\powershell\read.txt"

#ファイルの属性を取得
$info = Get-ItemProperty $path 

#フルパス
echo $info.FullName
#ファイル名
echo $info.Name
#拡張子
echo $info.Extension
#サイズ
echo $info.Length
#更新日
echo $info.LastWriteTime.ToString('yyyy/MM/dd HH:mm:ss')

			


■サンプル:空のファイルを作成
				
New-Item -Type File new.txt

			


■サンプル:ファイルに指定文字が含まれているかチェック
				
if ((Get-Content "C:\work\memo.txt" | %{$_ -match "test"}) -contains $true) {
    Write-Output "TRUE"
}

			

■サンプル:Grep
				
# フォルダ内のファイルやファイルを指定してGrep
# Select-String "検索単語" ファイル
Select-String "div" C:\work\*.html

# 指定フォルダ内の全ファイルに対してGrep
# Get-ChildItem フォルダ -Filter ファイル -Recurse | Select-String "検索単語"
Get-ChildItem C:\work -Filter *.html -Recurse | Select-String "div"

			

■サンプル:zip圧縮、解凍
				
# ファイル指定で圧縮
Compress-Archive -Path C:\work\tmp\a.txt -DestinationPath C:\work\b.zip

# ワイルドカード指定で圧縮
Compress-Archive -Path C:\work\tmp\*.txt -DestinationPath C:\work\b.zip

# フォルダ指定で圧縮
Compress-Archive -Path C:\work\tmp -DestinationPath C:\work\b.zip

# 解凍
Expand-Archive -Path C:\work\b.zip -DestinationPath C:\work\c

			
-Path で元ファイル(フォルダ)指定、-DestinationPathで先ファイル(フォルダ)指定。強制的に上書く場合、-Force を付けます。


ページのトップへ戻る