2009-08-12 12 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

tf.exeは、PowerShellコマンドレットではありませんので、私は、あなた「は、この場合も5で始まる5 *ので、あなただけのプロセス名による最初のフィルタ、ドンうスクリプトブロックを使用して新しい名前を決定したいただ、そのようなグループ化式を使用:あなたはこのようなネイティブEXEに渡すデバッグパラメータにしようとしているとき

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

はところで、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」(またはNew-TfsPendingChange -Rename)が1分ごとに開始されます。
関連する問題