假设我们$/myProject/myFolder
在 TFS 服务器上有一个文件夹,其中包含一些文件和子文件夹。
是否有可能使用tf.exe
命令行实用程序迭代地隐藏此文件夹下的每个元素(而不是递归地)?
我不能简单地隐藏根文件夹$/myProject/myFolder
,因为我需要在之后隐藏它的一些元素,这似乎只有在每个元素都被独立隐藏的情况下才有可能。
最后,我想实现特定根文件夹下的所有元素都被隐藏,除了一些预定义的元素。
假设我们$/myProject/myFolder
在 TFS 服务器上有一个文件夹,其中包含一些文件和子文件夹。
是否有可能使用tf.exe
命令行实用程序迭代地隐藏此文件夹下的每个元素(而不是递归地)?
我不能简单地隐藏根文件夹$/myProject/myFolder
,因为我需要在之后隐藏它的一些元素,这似乎只有在每个元素都被独立隐藏的情况下才有可能。
最后,我想实现特定根文件夹下的所有元素都被隐藏,除了一些预定义的元素。
通过一些创造性的批处理,您可能可以将tf dir .
和tf workfold /cloak
. 但是没有标准方法可以将这些命令链接在一起而不解析来自tf dir
.
使用 Powershell 和 TFS 客户端对象模型可能更容易。使用静态Workstation.Current
属性查找连接设置Workstation.GetWorkspaceInfo(path) .ServerUri
,从那里使用VersionControlServer.GetWorkspace
方法来获取工作区,然后调用Workspace.Cloak
方法来隐藏使用方法找到的项目VersionControlServer.GetItems
。
可以在此处找到一个非常接近的示例:
与我写过的最糟糕的源代码相比,这个绝对排在前三名之下。
但是,在做了几乎所有可能的批处理初学者的错误之后,下面的代码终于做了我需要的(考虑到代码中提到的限制)。
它将隐藏预定义根文件夹下的所有文件夹和文件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 = Get-ChildItem
# filter $folders as needed
PS> $folders | ForEach-Object { tf workfold /cloak $_.Name }