【问题标题】:TFS: Cloaking multiple elements from command lineTFS:从命令行隐藏多个元素
【发布时间】:2015-12-04 10:52:46
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: visual-studio tfs tf-cli cloaking


    【解决方案1】:

    通过一些创造性的批处理,您可能可以结合tf dir .tf workfold /cloak。但是没有标准的方法可以在不解析tf dir 的输出的情况下将这些命令链接在一起。

    使用 Powershell 和 TFS 客户端对象模型可能更容易。使用静态Workstation.Current 属性查找连接设置Workstation.GetWorkspaceInfo(path) .ServerUri,从那里使用VersionControlServer.GetWorkspace 方法获取工作区,然后调用Workspace.Cloak 方法来隐藏使用VersionControlServer.GetItems 方法找到的项目。

    一个非常接近的例子可以在这里找到:

    【讨论】:

    • 这个答案为我指明了正确的方向。请在下面找到我提出的解决方案。
    【解决方案2】:

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

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

    它将隐藏预定义根文件夹myServerFolder 下的所有文件夹和文件。 myServerFolder 必须具有以下语法,包括最后的斜杠:$/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 中只是为了能够在批处理文件中忘记这些构造和变量操作语法混乱;)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多