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
方法。
可以在此处找到一个非常接近的示例:
和我写过的最烂的源代码相比,这个绝对排在前三。
然而,在犯了几乎所有可能的批处理初学者错误之后,下面的代码终于满足了我的需要(考虑到代码中提到的限制)。
它将隐藏预定义根文件夹下的所有文件夹和文件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 }
假设我们在 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
方法。
可以在此处找到一个非常接近的示例:
和我写过的最烂的源代码相比,这个绝对排在前三。
然而,在犯了几乎所有可能的批处理初学者错误之后,下面的代码终于满足了我的需要(考虑到代码中提到的限制)。
它将隐藏预定义根文件夹下的所有文件夹和文件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 }