PowerShell - 两个字符之间的小写文本

PowerShell - lowercase text between two characters

我有很多 .txt 文件,我需要将两个字符之间的内容小写 - 在“%”之后和“;”之前。

下面的代码使文件中的所有内容都变成小写,我需要它只在提到的两个字符之间的所有情况下都这样做。

$path=".\*.txt"
Get-ChildItem $path -Recurse | foreach{    
    (Get-Content $_.FullName).ToLower() | Out-File $_.FullName
}

这里是一个使用 regex 替换为回调函数以执行小写的示例:

$path=".\*.txt"
$callback = {  param($match) $match.Groups[1].Value.ToLower() }
$rex = [regex]'(?<=%)(.*)(?=;)'

Get-ChildItem $path -Recurse | ForEach-Object {
        $rex.Replace((Get-Content $_ -raw), $callback) | Out-File $_.FullName
}

解释:

正则表达式使用正后向查找 % 的位置,并使用前向查找 ; 的位置并计算组中的所有内容:

caputred 组被传递给 callback 函数,该函数在其上调用 ToLower()