У меня есть сценарий, который игнорирует некоторые блоки текста, но я просто не знаю, как заменить проигнорированный текст в исходную строку, чтобы она была удалена.
Я попытался создать вектор массива, но PowerShell делает странные вещи с передачей имуществом, например массив $ + = $ _ добавляет больше текста, чем он должен ...
помощи ценится, вот мой сценарий:
#$path = (Get-Item -Path ".\" -Verbose).FullName
$path = split-path -parent $MyInvocation.MyCommand.Definition
$files = Get-ChildItem "$path\test" -r # root path $PSScriptRoot
#echo $path
#echo $files
#echo $files.Count
ForEach ($file in $files){
#echo "the value of i is" $i
#echo $file.FullName
#iterate through files from the current folder.
$data = Get-Content -Path $files.FullName
#echo "$data"
# parse DisabledFeatures.txt file as array of strings (1 string per line of the file)
$feature = Get-Content "$path\Disabled_Features.txt"
echo $feature.Count
#[System.Collections.ArrayList]$Modifier
$nl=[Environment]::NewLine
#iterate for each string entry in $feature array (read from txt file)
for($counter=0; $counter -lt $feature.Count; $counter++){
#Start ignoring text after we've found the trigger
$parse = $feature[$counter]
#$Modifier.Clear()
$data | ForEach-Object -Begin {
$ignore = $false; $levels = 0
} -Process {
if($_ -match "^#ifdef $parse") {
$ignore = $true
#echo "start ignore"
}if($ignore) { #Track nested groups
if ($_ -match "^#ifdef") {
$levels++
#echo "levels++"
}elseif ($_ -match "#endif") {
if($levels -ge 1) {
$levels--
#echo "levels --"
}else { #If no nesting, we've hit the end of our targeted group. Stop ignoring
$ignore = $false
#echo "end ignore"
}
}
}else { #Append line
$temp=$_
$Modifier+="$temp$nl"
}
}
echo $Modifier
}
}
Этот вопрос немного неясен. Не могли бы вы предоставить образец ввода и желаемый результат? –
Я уже нашел решение, написав $ data = $ data | ForEach-Object -Begin {....... , а затем перенаправление вывода как: $ data | output-file "path" – Jackson
Затем ответьте на свой вопрос –