Переименуйте его после копирования с помощью powershell - PullRequest
9 голосов
/ 30 декабря 2011

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

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

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

14 голосов
/ 30 декабря 2011

Вы можете переименовать файл при копировании в 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")
}

Или намного короче и шире, если следовать комментариям Ричарда

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...