要求在匹配的图案线
之前在多个文件中插入一个空行考虑一个包含以下内容的文件 苹果 树 橙子 [水果] 红色 绿色
预期产量: 苹果 树 橙
[水果] 红色 绿色
尝试下面的代码。帮我弄清下面代码中的错误
$FileName = Get-ChildItem -Filter *.ini -Recurse
$Pattern = "\[Fruit]\"
[System.Collections.ArrayList]$file = Get-Content $FileName
$insert = @()
for ($i=0; $i -lt $file.count; $i++) {
if ($file[$i] -match $pattern) {
$insert += $i #Record the position of the line before this one
}
}
#Now loop the recorded array positions and insert the new text
$insert | Sort-Object -Descending | ForEach-Object { $file.insert($_," ") }
Set-Content $FileName $file
以上代码对单个文件很好,但对于多个文件,文件内容重复
答案 0 :(得分:1)
Re:如何使这个工作适用于多个文件...
$FileName = Get-ChildItem -Filter *.ini -Recurse
如果只有一个.ini文件,那么 $ FileName 将是一个文件。
使用通配符和-Recurse
开关表示您希望找到多个文件;因此,此命令会将集合文件分配给 $ FileName 变量(即它将是一个数组)。
请注意,当您致电Get-Content
时,您传递 $ FileName :
[System.Collections.ArrayList]$file = Get-Content $FileName
当 $ FileName 是文件的集合/数组时,这不会起作用。
你需要做的是设置一个循环来执行你的"插入换行符"逻辑 foreach (提示提示)数组中的文件。现在再去看看那些PS教程......
答案 1 :(得分:0)