TFS:从命令行隐藏多个元素

TFS: Cloaking multiple elements from command line

假设我们在 TFS 服务器上有一个文件夹 $/myProject/myFolder,其中包含一些文件和子文件夹。

是否有可能使用 tf.exe 命令行实用程序迭代隐藏此文件夹下的每个元素(不是递归地)?

我不能简单地隐藏根文件夹 $/myProject/myFolder,因为之后我需要隐藏它的一些元素,这似乎只有在每个元素都被独立隐藏的情况下才有可能。

最后,我想实现隐藏特定根文件夹下的所有元素,除了一些预定义的元素。

通过一些有创意的批处理,您可能可以组合 tf dir .tf workfold /cloak。但是没有标准的方法可以在不解析 tf dir.

的输出的情况下将这些命令链接在一起

使用 Powershell 和 TFS 客户端对象模型可能更容易。使用静态 Workstation.Current property to find the connection settings Workstation.GetWorkspaceInfo(path) .ServerUri, from there use the VersionControlServer.GetWorkspace method, to grab the workspace and then call the Workspace.Cloak method to cloak the items you found using VersionControlServer.GetItems 方法。

可以在此处找到一个非常接近的示例:

和我写过的最烂的源代码相比,这个绝对排在前三。

然而,在犯了几乎所有可能的批处理初学者错误之后,下面的代码终于满足了我的需要(考虑到代码中提到的限制)。

它将隐藏预定义根文件夹下的所有文件夹和文件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

在 PowerShell 中,它既安全又简单:

    PS> $folders = Get-ChildItem
    # filter $folders as needed 
    PS> $folders | ForEach-Object { tf workfold /cloak $_.Name }