CSVファイルなどのテキストファイルのヘッダー行を削除したいことがあると思います。
テキストファイルの先頭行を削除するPowerShellスクリプトをメモしておきます。
サンプルコード
$inputFolder = 'C:\path\to\input\folder' # 入力フォルダのパス
$outputFolder = 'C:\path\to\output\folder' # 出力フォルダのパス
# 入力フォルダの全tsvファイルを処理
Get-ChildItem -Path $inputFolder -Filter *.tsv | ForEach-Object {
$filePath = $_.FullName
$outputFilePath = Join-Path $outputFolder $_.Name
# ファイルの先頭行を削除して新しいパスに保存
$content = Get-Content $filePath -Encoding UTF8 | Select-Object -Skip 1
$utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $false
[System.IO.File]::WriteAllLines($outputFilePath, $content, $utf8NoBomEncoding)
}
入力フォルダの全てのTSVファイルを処理して、出力フォルダに格納するスクリプトです。
入力ファイル、出力ファイルともにUTF-8を指定しています。特に出力ファイルはUTF-8のBOM無しとしています。文字コードを指定しないと実行環境に依存するらしく、Shift-JISのファイルが出力されました。
文字コード変更
別の文字コードでファイル操作を行いたい場合は、以下の個所を変更します。
$content = Get-Content $filePath -Encoding UTF8 | Select-Object -Skip 1
$utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $false
[System.IO.File]::WriteAllLines($outputFilePath, $content, $utf8NoBomEncoding)
ASCIIの場合
ASCIIの場合、以下のとおり変更します。
$content = Get-Content $filePath -Encoding ASCII | Select-Object -Skip 1
[System.IO.File]::WriteAllLines($outputFilePath, $content, [System.Text.Encoding]::ASCII)
UTF-16 LE(BOMなし)
.NETのUnicodeEncoding
クラスを使用して、BOMなしのUTF-16 LEエンコーディングを指定します。
$content = Get-Content $filePath -Encoding Unicode | Select-Object -Skip 1
$unicodeNoBomEncoding = New-Object System.Text.UnicodeEncoding $false, $false