如何用PowerShell按原大小写重命名文件名及文件内容?
PowerShell实现大小写对应匹配替换方案
要实现按原文本大小写模式匹配替换(如uvw→xyz、UVW→XYZ、Uvw→Xyz),同时将abc_123(含所有大小写变体)默认替换为def_123,可以通过以下修改实现:
核心实现逻辑
- 对于
UVW类的大小写对应替换:利用.NET正则表达式的匹配评估器,根据匹配文本的大小写结构生成对应的替换文本。 - 对于
abc_123的替换:使用不区分大小写匹配,但固定替换为def_123(而非对应大小写的变体)。
修改后的完整脚本
$filePath = "C:\root_folder" $include = '*.txt', '*.xml' # 根据需要调整 # 定义UVW到XYZ的大小写对应替换逻辑 $uvwReplaceEvaluator = { param($match) $original = $match.Value $target = "XYZ" $result = [char[]]::CreateInstance([char], $original.Length) for ($i = 0; $i -lt $original.Length; $i++) { if ([char]::IsUpper($original[$i])) { $result[$i] = [char]::ToUpper($target[$i]) } else { $result[$i] = [char]::ToLower($target[$i]) } } return -join $result } Get-ChildItem -File $filePath -Recurse -Include $include | # 重命名文件:处理文件名中的UVW大小写对应替换 Rename-Item -WhatIf -PassThru -NewName { [regex]::Replace($_.Name, 'uvw', $uvwReplaceEvaluator, [System.Text.RegularExpressions.RegexOptions]::IgnoreCase) } | ForEach-Object { $content = Get-Content -Raw -LiteralPath $_.FullName # 处理文件内容中的UVW大小写对应替换 $content = [regex]::Replace($content, 'uvw', $uvwReplaceEvaluator, [System.Text.RegularExpressions.RegexOptions]::IgnoreCase) # 处理abc_123的替换:不区分大小写匹配,固定替换为def_123 $content = $content -replace 'abc_123', 'def_123', [System.Text.RegularExpressions.RegexOptions]::IgnoreCase Set-Content -NoNewLine -LiteralPath $_.FullName -Value $content }
脚本说明
大小写对应替换逻辑:
- 定义
$uvwReplaceEvaluator脚本块,接收匹配到的文本后逐个字符判断大小写,生成对应大小写的XYZ变体。 - 通过
[regex]::Replace指定IgnoreCase选项,确保匹配所有大小写形式的uvw,再通过评估器输出对应替换结果。
- 定义
abc_123的替换:
- 使用
-replace并传入IgnoreCase选项,匹配所有大小写形式的abc_123,统一替换为固定的def_123。
- 使用
注意事项:
- 测试阶段保留
-WhatIf参数可预览操作,移除后才会实际执行重命名和内容修改。 - 脚本支持PowerShell 5.1及以上版本,依赖.NET Framework正则表达式功能。
- 测试阶段保留
内容的提问来源于stack exchange,提问作者jennab
相关产品推荐
相关产品推荐

