Переименуйте его после копирования с помощью powershell

Я пытаюсь рекурсивно скопировать файлы и переименовать их.

в моих папках есть файл с тем же именем ,поэтому мне нужно переименовать его в момент его копирования.

но я продолжаю сталкиваться с проблемой. Следование моему кодексу. Он должен найти 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 ответов


вы можете переименовать файл при копировании в Copy-Item, просто укажите полный путь в обоих местах:

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

это переименует 1.config для 2.конфиг. Нет необходимости вызывать отдельную функцию переименования. Теперь ваш код должен выглядеть примерно так:

$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")
}

или путь короче и шире, если следовать комментарию Ричарда