我试图以递归方式复制文件并重命名。
我的文件夹中有相同名称的文件,因此我需要在复制时重命名它。
但我一直面临着问题。以下是我的代码。它应该找到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
}
答案 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")
}
如果遵循理查德的评论,或者更短更广泛