2011-12-30 3 views
9

파일을 반복적으로 복사하고 이름을 바꾸려고합니다.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 
} 

답변

14

당신은 두 곳의 전체 경로를 제공, 파일 이름을 바꿀 수 있습니다 :이 2.config하는 1.config의 이름을 바꿉니다

copy-item c:\PST\1.config c:\PST\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++ 
} 

당신은 그것도 짧은 경우에 할 수 루프에 사용 :

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

또는 방법 짧고 넓은 경우 리차드의 의견

+4

왜 프로세스를 따라야 한 번에 하나씩 (그리고 변수가 기본값을 얻음을 기억하십시오.)'Get-ChildItem -Path V : \ MyFolder -filt CoptForBuild.bat -rec | 복사 항목 -dest { "E : \ copyforbuild \"+ $ _. BaseName + ($ i ++) + ". txt"}'. ('Copy-Item'의 목적지처럼 타입 객체를 취하지 않는 매개 변수를 가진 Cmdlet은 중괄호를 사용하여 inbuilt for-each를 가지므로 루프가 대상을 결정할 필요가 없습니다.) – Richard

+0

Buddy, 예외를 throw합니다 . "Copy-Item : 인수가 'Path'매개 변수를 null이 아니기 때문에 바인딩 할 수 없습니다." – Samselvaprabu

+0

$ File = Get-ChildItem -Path "V : \ MyFolder \\ *. *"-Filter CopyForbuild.bat -Recurse $ i = 1 Foreach ($ f $ 파일) 의 { 복사 품목 $ f.FullName ("E : \ copyforbuild \"+ $ f.BaseName + $ I +) 은 $ i가 ++ "TXT."} 내가 제거하고 때 – Samselvaprabu

관련 문제