巨大なログファイルを別々のファイルに分割して表示できるように、powershellを使用しようとしています。私はいくつかのコードをオンラインで見つけ始めました。私のニーズに合わせて修正しました。私が持っている問題は、ログファイルとは別のフォルダにスクリプトを入れたいが、ログファイルと同じフォルダに分割ファイルを作成するということだ。現在は、スクリプトが入っているのと同じフォルダにログファイルを分割しています。set-location(split-path $filename -parent -resolve)
を実行して、ログファイルがあるフォルダにディレクトリを変更しましたが、分割ログファイルをスクリプトのあるフォルダに吐き出しました。どんな助けでも大変感謝しています。ログファイルと同じフォルダにある分割ログファイル
#split test
param (
[string] $filename = $null
)
$sw = new-object System.Diagnostics.Stopwatch
$sw.Start()
$rootName = [io.path]::GetFileNameWithoutExtension($filename)
$ext = [io.path]::GetExtension($filename)
$linesperFile = 100000#100k
$filecount = 1
$reader = $null
Set-Location(split-path $filename -parent -resolve)
try{
$reader = [io.file]::OpenText($filename)
try{
"Creating file number $filecount"
$writer = [io.file]::CreateText("{0}-{1}{2}" -f ($rootName,$filecount.ToString("000"),$ext))
$filecount++
$linecount = 0
while($reader.EndOfStream -ne $true) {
"Reading $linesperFile"
while(($linecount -lt $linesperFile) -and ($reader.EndOfStream -ne $true)){
$writer.WriteLine($reader.ReadLine());
$linecount++
}
if($reader.EndOfStream -ne $true) {
"Closing file"
$writer.Dispose();
"Creating file number $filecount"
$writer = [io.file]::CreateText("{0}-{1}{2}" -f ($rootName,$filecount.ToString("000"),$ext))
$filecount++
$linecount = 0
}
}
} finally {
$writer.Dispose();
}
} finally {
$reader.Dispose();
}
$sw.Stop()
Write-Host "Split complete in " $sw.Elapsed.TotalSeconds "seconds"
を参照してください[私の答え](http://stackoverflow.com/a/32379304/4424236)この質問のために:[スプリットテキストを
Join-Path
で絶対パスを作成し、その代わりCreateText()
にそれを渡すファイルをサイズ(ウィンドウ)に基づいて小さなファイルに変換]](http://stackoverflow.com/questions/32360801/split-text-file-into-smaller-files-based-on-size-windows) – beatcracker