2016-03-30 6 views
0

巨大なログファイルを別々のファイルに分割して表示できるように、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" 
+0

を参照してください[私の答え](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

答えて

1

.NETメソッド(例えば等File.CreateText())、むしろSet-Locationによって設定されたPowerShellの固有の位置よりも、プロセス実行中の作業ディレクトリに対する部分経路を解決します。

$newFileName = '{0}-{1}{2}' -f ($rootName,$filecount.ToString("000"),$ext) 
$fullPath = Join-Path -Path (Split-Path $filename -Parent) -ChildPath $newFileName 
$writer  = [IO.File]::CreateText($fullPath) 
+0

.NETメソッドでパスが解決され、コードが意図したとおりに機能してくれてありがとう、ありがとう。 – themackyo

関連する問題