【问题标题】:Powershell ISE - How do I copy many files and rename them at the same time?Powershell ISE - 如何复制多个文件并同时重命名它们?
【发布时间】:2016-06-01 16:19:31
【问题描述】:

我正在尝试使用 Powershell ISE 来帮助我执行以下操作:

  • 在某个文件夹下搜索多个文件(扩展名为 *props.tmpl)并包括所有子目录。
  • 找到后,我想将该文件复制到其当前位置,但扩展名为 *.tmpl2(我真正想要的是跳过此步骤并将 *props.tmpl 复制到名为 *props 的文件中)李>
  • 然后重命名所有 *.tmpl2 文件并完全删除 tmpl2,只留下 *.props 扩展名。

理想情况下,我想要的是用新名称将现有文件复制到同一目录。似乎我在 Powershell ISE 上运行的所有搜索都没有提供我需要的正确信息(或者我没有寻找正确的方法 - 尝试“powershell ise 复制许多具有新名称的文件”没有帮助。

我已经完成了替换部分并可以正常工作,但我不想再删除原始 tmpl 文件(它们是模板,因此我可能想稍后查看它们的原始内容)。

我正在做的是替换它们:

Get-ChildItem -Filter "*props.tmpl" -Recurse |
   Rename-Item -NewName { $_.name -replace '.tmpl',''}

除了完全删除原始文件之外,这很有效。

我开始尝试拼凑一些东西,但我不明白如何正确命名副本并在此时停止,只是出现一个错误(这是试图跳过额外副本并只是简单地重命名副本而不是添加'*.tmpl2'的额外步骤):

# Get all *props.tmpl files
Get-ChildItem -Filter "*props.tmpl" -Recurse |

# Iterate through each found file
ForEach-Object {
    Copy-Item $_.name |
        Rename-Item -NewName { $_.name -replace '.props.tmpl','.props' }
}

任何帮助都将不胜感激(不是 Powershell 人,但我正在努力学习,因为 powershell 往往比老式批处理脚本更具动态性)。

提前致谢


根据@ssennett 的帮助,此脚本的最终版本

这是我的最终版本:

# Get all *props.tmpl files
Get-ChildItem -Filter "*props.tmpl" -Recurse |

# Iterate through each found file and copy it to non-template form in same location
ForEach-Object {
    Copy-Item $_.FullName ($_.Name -replace '.tmpl','')
 }

【问题讨论】:

    标签: file powershell copy rename


    【解决方案1】:

    你离答案不远了!这就是 Copy-Item 的处理方式。

    如果没有指定目标,复制项将有效地尝试将文件复制到自身。您可以使用 -Destination 参数处理重命名,而不是通过管道将其传递给 Rename-Item,如下所示。

    $files = Get-ChildItem -Filter "*props.tmpl" -Recurse
    $files  | % { Copy-Item -Path $_.FullName -Destination ($_.Name -replace 'props.tmpl','.props') }
    

    这会将一个名为 RandomFileprops.tmpl 的文件复制到另一个文件 RandomFile.props 中。如果要删除原始文件,可以使用具有相同参数的 Move-Item cmdlet,它可以有效地重命名原始文件。

    【讨论】:

    • 刚刚意识到,我应该澄清一下:管道后面的 % 是“Foreach”的别名。
    • 非常感谢@ssennett。这正是我所需要的
    • 我只是注意到这不适用于子目录中的文件(尽管它会获取文件名,但实际上并没有更改名称)。你知道什么会破坏'-Recurse'标志@ssennett吗?
    • 我似乎使用的是 Powershell ISE 版本 2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 2021-10-23
    • 2022-02-03
    • 1970-01-01
    • 2019-01-17
    • 2015-07-09
    相关资源
    最近更新 更多