2

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

是否有可能使用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

与我写过的最糟糕的源代码相比,这个绝对排在前三名之下。

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

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

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

    PS> $folders = Get-ChildItem
    # filter $folders as needed 
    PS> $folders | ForEach-Object { tf workfold /cloak $_.Name }
于 2017-12-06T19:32:24.757 回答