Powershell ISE - 如何复制多个文件并同时重命名?

时间:2016-02-19 22:37:41

标签: file powershell copy rename

我尝试使用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往往比oldschool批处理脚本更有活力)。

提前致谢

@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','')
 }

1 个答案:

答案 0 :(得分:1)

你离答案不太远!它只是处理Copy-Item的方式。

如果未指定Destination,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,这样可以有效地重命名原始文件。