使用 Powershell 尊重原始大小写重命名文件中的文件名和内容

2024-04-25

关于按照解决方案使用 Powershell 重命名文件和文件内内容的问题here https://stackoverflow.com/questions/77081055/renaming-of-files-and-content-within-files-using-powershell.

使用下面的脚本,所有文件名和文件中出现的位置都会被重命名。 替换不区分大小写,即无论是否出现“uvw”、“UVW”、“Uvw”等,替换都是“XYZ”。 是否可以尊重原文的情况,重新命名为“true to origin”,即 “uvw”->“xyz”,“UVW”->“XYZ”,“Uvw”->“Xyz”(默认情况下“abc_123”应该是“def_123”而不是“DEF_123”)?

$filePath = "C:\root_folder"
$include = '*.txt', '*.xml' # adapt as needed
Get-ChildItem -File $filePath -Recurse -Include $include | 
 Rename-Item -WhatIf -PassThru -NewName { $_.Name -replace 'UVW', 'XYZ' } |
 ForEach-Object {
 ($_ | Get-Content -Raw) -replace 'ABC_123', 'DEF_123' |
   Set-Content -NoNewLine -LiteralPath $_.FullName
}

另一种方法圣地亚哥的有用答案 https://stackoverflow.com/a/77089648/45375,它也依赖于为每个匹配调用的匹配评估器脚本块:

总体思路是:

  • 循环匹配匹配文本和替换文本共享的字符数
  • Use a System.Text.StringBuilder https://learn.microsoft.com/en-US/dotnet/api/System.Text.StringBuilder实例来逐个字符地构建替换文本的大小写匹配版本。
  • 替换字符串中的任何其他字符(匹配文本中没有对应字符的字符)将按原样保留。

两种解决方案均低于输出<XyZ>, 如预期。

PowerShell(核心)7+ https://github.com/PowerShell/PowerShell/blob/master/README.md解决方案:

# Sample input string
$inputString = '<UvW>'
# Sample search pattern.
$searchPattern = 'uvw'
# Sample replacement text.
$replaceWith = 'xyz'

# A string builder to make constructing the case-matched replacement string
# more efficient.
$caseMatchedReplaceWith = [System.Text.StringBuilder]::new($replaceWith.Length)

$inputString -replace $searchPattern, {  
  $matchedText = $_.Value
  $numCharsToMatch = [Math]::Min($replaceWith.Length, $matchedText.Length)
  $null = $caseMatchedReplaceWith.Clear()
  foreach ($i in 0..($numCharsToMatch-1)) {
    $replacementChar = $replaceWith[$i]
    if ([char]::IsUpper($matchedText[$i]) -and -not [char]::IsUpper($replacementChar)) {
      $replacementChar = [char]::ToUpper($replacementChar)
    } 
    $null = $caseMatchedReplaceWith.Append($replacementChar)
  }
  $caseMatchedReplaceWith.ToString() + $replaceWith.Substring($numCharsToMatch)
}

Windows PowerShell解决方案(其中使用脚本块作为替换操作数-replace不支持):

# Sample input string
$inputString = '<UvW>'
# Sample search pattern.
$searchPattern = 'uvw'
# Sample replacement text.
$replaceWith = 'xyz'

# A string builder to make constructing the case-matched replacement string
# more efficient.
$caseMatchedReplaceWith = [System.Text.StringBuilder]::new($replaceWith.Length)

[regex]::Replace(
  $inputString,
  $searchPattern, 
  {  
    $matchedText = $args[0].Value
    $numCharsToMatch = [Math]::Min($replaceWith.Length, $matchedText.Length)
    $null = $caseMatchedReplaceWith.Clear()
    foreach ($i in 0..($numCharsToMatch-1)) {
      $replacementChar = $replaceWith[$i]
      if ([char]::IsUpper($matchedText[$i]) -and -not [char]::IsUpper($replacementChar)) {
        $replacementChar = [char]::ToUpper($replacementChar)
      } 
      $null = $caseMatchedReplaceWith.Append($replacementChar)
    }
    $caseMatchedReplaceWith.ToString() + $replaceWith.Substring($numCharsToMatch)
  },
  'IgnoreCase'
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Powershell 尊重原始大小写重命名文件中的文件名和内容 的相关文章

随机推荐

  • 使用 Java API 从 Lotus Notes NSF 文件中提取电子邮件

    我想使用 Java API Notes jar 并且正在运行安装了 Lotus Notes 8 5 的 Windows 机器 我对 Lotus Notes 一无所知 我只需要完成一项狭窄的任务 从 NSF 文件中提取电子邮件 我希望能够遍历
  • 使用 Python 将方程渲染为 .png 文件

    我想将方程渲染为 PNG 文件并将它们嵌入到我的库的 HTML 文档中 我已经在其他项目中使用 pylab matplotlib 我还没有找到任何线索http matplotlib sourceforge net users usetex
  • 不懂 C 就开始学习 C#? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否建议只了解一点点 C 只是一些基础知识 或什至不了解 C 就直接跳到 C C 和 C 非常不同 它们共享语法 但编程风格却截然不同 学习 C
  • 我可以使用反射在类中添加新字段吗

    如果我有类文字对象 我可以向类添加新字段吗 如何确定该类文字中引用或使用了特定的类 您不能直接向其中添加新字段Class目的 您可以使用第三方 API 来生成或修改类 例如 ASM BCEL 但最好避免使用它们 因为它们会增加很多复杂性 至
  • WebRTC:强制对等点使用 TURN 服务器

    我有一个 webrtc 应用程序 它工作正常 但出于测试目的 我需要测试我的 TURN 服务器是否工作 但因为两个测试设备都在同一网络内 所以我无法测试 认为下面的代码会限制候选人仅那些使用 TURN 服务器的 function onIce
  • 使用 boost asio 枚举我的卡的 ipv4 和 ipv6 地址

    我正在尝试枚举我的电脑的所有网卡 我有 2 张卡 的 ipv4 和 ipv6 地址 我正在使用以下代码来执行此操作 using boost asio ip tcp boost asio io service io service tcp r
  • Pkcs11Interop 从 HSM 读取密钥值

    我正在尝试使用 Pkcs11Interop 从 HSM 中提取密钥的值 我知道 密钥必须留在 HSM 中 但我需要它 所以 我已经用 NCryptoki 做到了 我也想用 Pkcs11Interop 做到这一点 我尝试了这段代码 Prepa
  • 使用 JavaScript 进行分页

    我有一些 html 代码 div class post 里面 我想用 javascript 对它们进行分页 我怎样才能做到这一点 我知道我可以用 PHP 来做 但我只想用 JS 来做 我的 php 生成的 html 看起来像这样 div d
  • openMPI/mpich2 不能在多个节点上运行

    我正在尝试在多节点集群上使用 install openMPI 和 mpich2 但在这两种情况下 我在多台计算机上运行时都遇到问题 使用 mpich2 我可以从头节点在特定主机上运行 但是如果我尝试从计算节点到不同节点运行某些内容 我会得到
  • 如何确定多边形点列表是否按顺时针顺序排列?

    有了一个点列表 如何找到它们是否按顺时针顺序排列 例如 point 0 5 0 point 1 6 4 point 2 4 5 point 3 1 5 point 4 1 0 会说它是逆时针的 或者对某些人来说是逆时针的 对于非凸多边形 例
  • 如果使用多个 EAGLView,则不会绘制纹理

    我在使用Apple EAGLView 和Texture2D 时遇到了一些问题 如果我创建 EAGLView 的实例并绘制一些纹理 效果会很好 但是 每当我创建 EAGLView 的第二个实例时 都不会绘制新视图中的纹理 作为 OpenGL
  • BSSID可以作为唯一标识符吗?

    我正在构建一个 Android 应用程序 列出用户周围的所有 wifi 网络 当用户尝试使用特定服务时 我的应用程序需要有关用户网络的信息 当我的应用程序从用户网络获取所有信息时 它会自动在我的数据库表中插入一个新行 其中包含所有这些必要的
  • JDBC 连接池选项:DBCP 与 C3P0 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 适用于 Java JDBC 的最佳连接池库是什么 我正在考虑两个主要候选者 免费 开源 阿帕奇 DBC
  • Django - 如何直接从表中的按钮删除对象

    对不起 我的英语不好 我需要删除一个对象 但直接从模板中的对象列表中删除 我有一个工作订单 其中有备件 但我不知道如何仅使用工作订单详细视图中的按钮来创建备件的删除视图 这个想法是用户单击 删除 按钮 这是备件的型号 class Order
  • SQL Server 使用 Case When 和常量的语法进行排序

    我正在阅读其他人编写的 TSQL 代码 发现语法有些奇怪 它通过字符串进行排序 我做了一些测试 以下是代码 任何人都可以帮我解释一下吗 谢谢 第一个查询 SELECT FROM dbo Products Result ProductID P
  • 如何配置“git pull --ff-only”和“git merge --no-ff”

    对我来说 典型的 git 工作流程是克隆远程存储库并使用 git pull 使其保持最新 我不想在拉取时合并提交 所以我使用 ff only 选项 我还为特色工作设立了当地分支机构 我想保留分支历史记录 因此当我将本地分支合并回本地克隆时
  • 找到总和为 K 的三个元素

    我编写了以下代码来查找总和为 K 的两个元素 include
  • Python将txt文件读入数字列表列表[重复]

    这个问题在这里已经有答案了 我的 txt 文件如下所示 1 3 5 1 4 4 1 4 7 1 4 8 2 4 5 我试图将其转换为一个列表 其中包括txt文件中的所有列表 所以我的示例所需的输出是 1 3 5 1 4 4 1 4 7 1
  • jquery:如何循环一个div

    使用jquery 如何自动连续滚动div 喜欢本网站的新闻和专题部分 http animalsasia org http animalsasia org 此外 当您将鼠标悬停在滑块上时 它会停止滚动 直到您将鼠标悬停为止 有没有一个 jqu
  • 使用 Powershell 尊重原始大小写重命名文件中的文件名和内容

    关于按照解决方案使用 Powershell 重命名文件和文件内内容的问题here https stackoverflow com questions 77081055 renaming of files and content within