而不是像How to remove First and Last Line in Powershell
中那样输出具有Set-Content的文件$csv = Import-Csv in.csv -header Date,Time,O,H,L,C,V |
Select * -ExcludeProperty time |
Foreach {$_.date = [datetime]::ParseExact($_.date,"yyyy.MM.dd",$null).tostring("yyMMdd");$_.v=1;$_} |
ConvertTo-Csv -NoTypeInformation
for ($i = 1; $i -lt ($csv.Length - 1); $i++ {
$csv[$i] -replace '"' | Set-Content out.csv -encoding ascii
}
我只想将这些行放在$ csv2 var而不是out.csv中。 Set-Content不适用于var。怎么做(我没有Powershell 5)?
答案 0 :(得分:1)
代码的问题在于,每次调用Set-Content时,它都会重写文件并替换文件已有的任何内容。
考虑将-append开关添加到Set-Content。这将添加到文件而不是覆盖它。记住还要确保文件是空的,因为你开始写它。
我还会考虑使用更简单的方法来获取文件的“中间”内容。检查以下示例。它可能无法满足您的所有要求,但是使用Range运算符除了第一个和最后一个元素之外,它是一个简单的方法来获取数组中的所有元素。
# First setup the test data
$filecontent = @"
Line 1 skip please
Line 2 include
Line 3 include
Line 4 include
Line 5 include
Line 6 include
Line 7 include
Line 8 include
Line 9 include
Line 10 skip please
"@
$filecontent | Set-Content in.csv
$content = Get-Content in.csv
$content[-($content.Length-1)..-2] | Set-Content out.csv
答案 1 :(得分:1)
你快到了。而不是管道到Set-Content,只需将其分配给您的变量。 (顺便说一句,你的原始代码在for循环中缺少一个右括号,我在这里也进行了修正。)
$csv = Import-Csv in.csv -header Date,Time,O,H,L,C,V |
Select * -ExcludeProperty time |
Foreach {$_.date = [datetime]::ParseExact($_.date,"yyyy.MM.dd",$null).tostring("yyMMdd");$_.v=1;$_} |
ConvertTo-Csv -NoTypeInformation
$csv2 = for ($i = 1; $i -lt ($csv.Length - 1); $i++) {
$csv[$i] -replace '"'
}