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

Visual studio TFS:从命令行隐藏多个元素,visual-studio,tfs,tf-cli,cloaking,Visual Studio,Tfs,Tf Cli,Cloaking,假设我们在TFS服务器上有一个文件夹$/myProject/myFolder,其中包含一些文件和子文件夹 是否有可能使用tf.exe命令行实用程序迭代隐藏此文件夹下的每个元素(而不是递归) 我不能简单地掩蔽根文件夹$/myProject/myFolder,因为我需要在之后清除它的一些元素,这似乎只有在每个元素都被独立掩蔽的情况下才可能实现 最后,我希望实现特定根文件夹下的所有元素都被隐藏,除了一些预定义的元素。通过一些创造性的批处理,您可能可以将tf dir.和tf workfold/clope

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

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

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


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

通过一些创造性的批处理,您可能可以将
tf dir.
tf workfold/clope
组合起来。但是,如果不解析来自
tfdir
的输出,就没有标准的方法将这些命令链接在一起

使用Powershell和TFS客户端对象模型可能更容易。使用static属性查找连接设置,然后使用该方法获取工作区,然后调用该方法隐藏使用该方法找到的项

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


与我所写过的最差的源代码相比,这段代码肯定排在前三位

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

它将隐藏预定义根文件夹下的所有文件夹和文件
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中,它既安全又简单:

PS>$folders=获取子项
#根据需要筛选$folders
PS>$folders | ForEach对象{tf workfold/clope$|.Name}

我提出了一个可能的解决方案。请随意评论。我会将其包装在powershell中,这样就可以忘记批处理文件中的构造和变量操作语法混乱;)这个答案为我指明了正确的方向。请在下面找到我建议的解决方案。