我正在尝试使用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 :(得分:1)
.NET方法(例如File.CreateText()
)解析相对于正在运行的进程的工作目录的部分路径,而不是{{1}设置的PowerShell特定位置}}
使用Set-Location
创建绝对路径,然后将其传递给Join-Path
:
CreateText()