2

$/myProject/myFolderTFS サーバー上に、いくつかのファイルとサブフォルダーを含むフォルダーがあるとします。

tf.exeコマンドラインユーティリティを使用して、このフォルダーの下のすべての要素を (再帰的にではなく) 繰り返しクロークする可能性はありますか?

$/myProject/myFolder各要素が個別にクロークされている場合にのみ可能と思われる要素の一部を後でクローク解除する必要があるため、ルートフォルダーを単純にクロークすることはできません。

最後に、特定のルート フォルダーの下にあるすべての要素が、事前定義されたものを除いてクロークされるようにしたいと考えています。

4

3 に答える 3

2

tf dir .いくつかの創造的なバッチ処理を使用すると、おそらくと を組み合わせることができますtf workfold /cloak。しかし、 からの出力を解析せずにこれらのコマンドを連鎖させる標準的な方法はありませんtf dir

おそらく、Powershell と TFS クライアント オブジェクト モデルを使用する方が簡単です。静的Workstation.Currentプロパティを使用して接続設定を見つけ、Workstation.GetWorkspaceInfo(path) .ServerUriそこからVersionControlServer.GetWorkspaceメソッドを使用してワークスペースを取得し、メソッドを呼び出して、Workspace.Cloakメソッドを使用して見つけたアイテムをクロークしますVersionControlServer.GetItems

非常に近い例を以下に示します。

于 2015-09-08T19:08:38.657 に答える
1

私がこれまでに書いたソース コードの中で最悪の部分と比較すると、これは間違いなくトップ 3 の下にあります。

ただし、ほぼすべての可能なバッチ初心者の間違いを行った後、以下のコードは最終的に必要なことを行います (コードに記載されている制限を考慮して)。

事前定義されたルート フォルダーの下にあるすべてのフォルダーとファイルをクロークしますmyServerFoldermyServerFolder最後のスラッシュを含む次の構文が必要です: $/myProject/myFolder/.

誰かがコードを単純化する良いアイデアを持っている場合、またはバグを見つけた場合は、直接編集するか、私に知らせてください。

改めまして、ご声援ありがとうございました!

@echo off
setlocal enabledelayedexpansion

REM Limitation: Folder and file names must not end with ")" nor start with "$"
set myServerFolder=$/myProject/myFolder/

REM Process Folders
for /f "Tokens=*" %%a in ('tf.exe dir %myServerFolder%') do (SET TEXT=%%a& SET SUBSTR_A=!TEXT:~-1!& SET SUBSTR_B=!TEXT:~0,1!& (IF "!SUBSTR_A!" NEQ ":" IF "!SUBSTR_A!" NEQ ")" (IF "!SUBSTR_B!" EQU "$" (set currParam=!TEXT:~1!&(tf.exe workfold /cloak "%myServerFolder%%!currParam!")))))

REM Process Files
for /f "Tokens=*" %%a in ('tf.exe dir %myServerFolder%') do (SET TEXT=%%a& SET SUBSTR_A=!TEXT:~-1!& SET SUBSTR_B=!TEXT:~0,1!& (IF "!SUBSTR_A!" NEQ ":" IF "!SUBSTR_A!" NEQ ")" (IF "!SUBSTR_B!" NEQ "$" (set currParam=!TEXT!&(tf.exe workfold /cloak "%myServerFolder%%!currParam!")))))

PAUSE
于 2015-09-09T10:17:32.867 に答える