2009-08-12 3 views
10

TFS 폴더를 tf rename, PowerShell 및 정규 표현식을 사용하여 재귀 적으로 이름을 바꾸려고하는데 PowerShell과 관련하여 많은 시간을 투자하지 않아서 문제가 발생합니다. 이것은 내가 2.3.2와 선도적 인 5을 대체하기 위해 지금까지 조립 한 것입니다 그러나 그것은 작동하지 않습니다 :PowerShell을 사용하여 파일의 이름을 일괄 적으로 바꿀 수 있습니까?

dir | foreach { tf rename $_ { $_.Name -replace '^5', '2.3.2' } } 

실제 결과 :

 
Unrecognized command option 'encodedCommand'. 
Unrecognized command option 'encodedCommand'. 
Unrecognized command option 'encodedCommand'. 
Unrecognized command option 'encodedCommand'. 
...etc. 

업데이트 :

내가있어 조금 더 가까이서 다음을 수행하면됩니다.

dir | foreach { $newname = $_.Name -replace "^5", "2.3.2"; tf rename $_ $newname } 

다음 목표는입니다. 이 재귀 하위 디렉토리를 만드는 데는 다소 어려움이 있습니다 (dir -recurse으로 변경하면 어떤 이유로 상위 폴더가 종료됩니다).

+0

답을 모르겠지만 좋은 질문입니다. :) –

답변

14

내가 5로 첫 번째 필터는 * 그래서 당신 tf.exe은 PowerShell을 cmdlet을 사용하지 않기 때문에이 경우, 또한 5로 시작하는 경우에만 프로세스 이름, 당신이 돈 것 ' 스크립트 블록을 사용하여 새 이름을 결정하려고합니다. 그냥과 같이 그룹화 표현식을 사용 :이 같은 기본 EXE에 전달 디버그 매개 변수를하려고 할 때

dir -filter 5* | foreach { tf rename $_ ($_.Name -replace '^5', '2.3.2')} 

BTW, PowerShell Community Extensions에서 echoargs.exe의 utilty를 사용하는 것이 대단히 도움이됩니다.

6# dir -filter 5* | foreach { echoargs rename $_ { $_.Name -replace '^5', '2.3.2' } } 
Arg 0 is <rename> 
Arg 1 is <5foo.txt> 
Arg 2 is <-encodedCommand> 
Arg 3 is <IAAkAF8ALgBOAGEAbQBlACAALQByAGUAcABsAGEAYwBlACAAJwBeADUAJwAsACAAJwAyAC4AMwAuADIAJwAgAA==> 
Arg 4 is <-inputFormat> 
Arg 5 is <xml> 
Arg 6 is <-outputFormat> 
Arg 7 is <text> 
+0

고마워! 우수 답변. – Luke

1

이 시도 :

dir . | foreach { $newname = $_.Name -replace "^5", "2.3.2"; tf rename $_ $newname } 
4

주의 사항 : - 대부분의 경우 tf.exe에 대한 필요

  • TFS가 native cmdlets 가지고 이것은 원래의 접근 방식에 대해 이야기하는 것이다.
  • 작업 영역 작업의 시간 복잡도는 이미 작업 영역에있는 보류중인 이름 변경 횟수에 따라 다릅니다. TFS 2005/2008에서는 선형보다 훨씬 더 심합니다. 결론적으로, 항목 수가 많으면 이름을 여러 체크 인으로 일괄 처리하는 것이 좋습니다. 그렇지 않으면 모든 "tf rename"(또는 cmdlet을 사용하는 경우 New-TfsPendingChange -Rename) 단 몇 분이 걸릴 것입니다.
관련 문제