【发布时间】:2018-08-16 21:25:05
【问题描述】:
我有以下脚本(大部分是在此处找到的),它非常适合使用第三个“列”中的值来拆分单个制表符分隔的文本文件。我需要它一次处理多个文本文件。可以是 2 也可以是 10。
我尝试添加一个foreach 语句,但它仍然只处理其中的一个文件,即使变量$source 保存了源文件夹中所有文件的值。请注意,使用注释掉的 $source 行,我试图创建一个包含完整路径和文件名的数组。使用时会报错。
代码如下:
#$source = Get-ChildItem \\srvfile1oke\meas\OEG\Shared\Text_File_Splitter\* -Include *.txt | %{ @{Path=$_.fullname} }
#$target = "\\srvfile1oke\meas\OEG\Shared\Text_File_Splitter\"
$source = Get-ChildItem "\\srvfile1oke\meas\OEG\Shared\Text_File_Splitter\*.txt"
$target = "\\srvfile1oke\meas\OEG\Projects\FlowCal service files\Flow Text Files\MeterTextFilesByImportID\"
$fileIn = New-Object -TypeName System.IO.StreamReader -ArgumentList $source
$header = $fileIn.ReadLine()
$currentFile = ""
foreach ($file in $source) {
while ($line = $fileIn.ReadLine()) {
$newFile = "$(($line -split "\t")[2]).txt"
if ($newFile -ne $currentFile) {
#starting on a new file
if ($currentFile -ne "") {
# Write out contents of current file
$fileOut.ToString() | Out-File -FilePath $target\$currentFile -Encoding ascii
}
# Get ready for a new current file
$currentFile = $newFile
$fileOut = New-Object -TypeName System.Text.StringBuilder
[void]$fileOut.Append($header)
}
Write-Verbose "$currentFile, $line"
[void]$fileOut.Append("`r`n$($line)")
}
# Write out contents of last file
$fileOut.ToString() | Out-File -FilePath $target\$currentFile -Encoding ascii
}
【问题讨论】:
标签: powershell foreach csv