使用PowerShell复制后重命名

时间:2011-12-30 10:31:40

标签: powershell powershell-v2.0

我试图以递归方式复制文件并重命名。

我的文件夹中有相同名称的文件,因此我需要在复制时重命名它。

但我一直面临着问题。以下是我的代码。它应该找到CopyForBuild.bat文件并将其复制到E:\ CopyForBuild文件夹。复制后,第一个文件应为Copyforbuild1.txt,第二个文件为CopyforBuild2.txt,依此类推。

以下是我的代码。我在哪里失败?

$File = Get-ChildItem -Path V:\MyFolder -Filter CopyForbuild.bat -Recurse

$i=1
Foreach ($f in $File)
{

   Copy-Item $f "E:\copyforbuild\"
   Rename-Item  -path "E:\Copyforbuild\"+"$f" -newname "CopyForbuild"+"$i"+".txt"
   $i = $i+1
}

1 个答案:

答案 0 :(得分:14)

您可以在Copy-Item中复制时重命名文件,只需在两个地方提供完整路径:

copy-item c:\PST\1.config c:\PST\2.config

这会将1.config重命名为2.config。无需调用单独的重命名功能。 您的代码现在看起来应该是这样的:

$File = Get-ChildItem -Path "V:\MyFolder\" -Filter CopyForbuild.bat -Recurse

$i=1
Foreach ($f in $File)
{
   Copy-Item $f.FullName ("E:\copyforbuild\" + $f.BaseName + $i +".txt")
   $i++
}

如果使用For循环:

,你可以缩短它
$File = Get-ChildItem -Path "V:\MyFolder\" -Filter CopyForbuild.bat -Recurse

for($i = 0; $i -lt $File.Count; $i++)
{
   Copy-Item $File[$i].FullName ("E:\copyforbuild\" + $File[$i].BaseName + $i +".txt")
}

如果遵循理查德的评论,或者更短更广泛