【问题标题】:How can I bulk rename files using PowerShell?如何使用 PowerShell 批量重命名文件?
【发布时间】:2010-11-19 01:44:00
【问题描述】:

我正在尝试使用 tf renamePowerShell 和正则表达式递归地重命名一堆 TFS 文件夹,但我在使用 PowerShell 时遇到了一些问题,因为我没有花太多时间使用它。到目前为止,这是我用2.3.2 替换领先的5 的内容,但它不起作用:

dir | foreach { tf rename $_ { $_.Name -replace '^5', '2.3.2' } }

实际结果:

无法识别的命令选项“encodedCommand”。 无法识别的命令选项“encodedCommand”。 无法识别的命令选项“encodedCommand”。 无法识别的命令选项“encodedCommand”。 ...等等。

更新:

通过执行以下操作,我离得更近了一点:

dir | foreach { $newname = $_.Name -replace "^5", "2.3.2"; tf rename $_ $newname }

我的下一个目标是创建这个递归子目录,但这似乎更具挑战性(将其更改为 dir -recurse 会使其在父文件夹之后退出)。

【问题讨论】:

  • 不知道答案,但这是个好问题。 :)

标签: tfs powershell


【解决方案1】:

试试这个:

dir . | foreach { $newname = $_.Name -replace "^5", "2.3.2"; tf rename $_ $newname }

【讨论】:

    【解决方案2】:

    我将首先按 5* 过滤,因此您只处理以 5 开头的名称。此外,在这种情况下,由于 tf.exe 不是 PowerShell cmdlet,您不想使用脚本块来确定新名称.只需使用这样的分组表达式:

    dir -filter 5* | foreach { tf rename $_ ($_.Name -replace '^5', '2.3.2')}
    

    顺便说一句,当您尝试像这样调试传递给本机 EXE 的参数时,使用 PowerShell Community Extensions 中的 echoargs.exe 实用程序非常有帮助。这就是它告诉我你原来的方法的原因:

    6# dir -filter 5* | foreach { echoargs rename $_ { $_.Name -replace '^5', '2.3.2' } }
    Arg 0 is <rename>
    Arg 1 is <5foo.txt>
    Arg 2 is <-encodedCommand>
    Arg 3 is <IAAkAF8ALgBOAGEAbQBlACAALQByAGUAcABsAGEAYwBlACAAJwBeADUAJwAsACAAJwAyAC4AMwAuADIAJwAgAA==>
    Arg 4 is <-inputFormat>
    Arg 5 is <xml>
    Arg 6 is <-outputFormat>
    Arg 7 is <text>
    

    【讨论】:

      【解决方案3】:

      注意事项:

      • TFS 有 native cmdlets -- 在大多数情况下不需要 tf.exe。
      • 工作区操作的时间复杂度取决于工作区中已挂起的重命名数量。在 TFS 2005/2008 中,它明显比线性差。最重要的是,如果您有大量项目,您真的应该考虑将重命名批处理到多个签入中,否则每个“tf rename”(如果使用 cmdlet,则为 New-TfsPendingChange -Rename)将开始花费几分钟。

      【讨论】:

        【解决方案4】:

        运行上述命令需要将 tf.exe 别名为 'tf'.. 或者至少在我的机器上是这样。

        运行这个命令:

        Set-Alias tf "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\tf.exe"
        

        根据需要更新 tf.exe 的路径

        还可以考虑将该行添加到您的个人资料中以供将来使用

        notepad $PROFILE
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-05
          • 2010-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多