2015-09-08 4 views
1

Предположим, у нас есть папка $/myProject/myFolder на сервере TFS, которая содержит некоторые файлы и подпапки.TFS: Cloaking несколько элементов из командной строки

Есть ли возможность итеративно скрыть каждый элемент под этой папкой (не рекурсивно) с помощью утилиты командной строки tf.exe?

Я не могу просто замаскировать корневую папку $/myProject/myFolder, потому что мне нужно впоследствии отложить некоторые из ее элементов, которые кажутся только возможными, если каждый элемент был скрыт независимо.

В конце концов, я хочу, чтобы все элементы под определенной корневой папкой были скрыты, за исключением некоторых предопределенных.

ответ

1

По сравнению с худшими куски исходного кода, который я когда-либо написанных, это один, безусловно, под первую тройку.

Однако, выполнив почти все возможные ошибки начинающего участника, приведенный ниже код, наконец, делает то, что мне нужно (учитывая ограничение, упомянутое в коде).

Он будет скрывать все папки и файлы под предопределенной корневой папкой 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 
+0

См. Http://stackoverflow.com/a/636391/736079 для подстрок – jessehouwing

+1

Я предложил возможное решение. Не стесняйтесь комментировать. – Rickson

+0

Я бы обернул его в PowerShell, чтобы иметь возможность забыть об этих конструкциях и переменных синтаксических манипуляций с переменной манипуляцией в пакетных файлах;) – jessehouwing

2

С некоторой творческой пакетной обработкой, возможно, вы можете комбинировать tf dir . и tf workfold /cloak. Но нет стандартного способа объединить эту команду, не анализируя вывод от tf dir.

Это, вероятно, легче сделать с Powershell и моделью объектов клиента TFS. Используйте свойство static Workstation.Current, чтобы найти настройки подключения Workstation.GetWorkspaceInfo(path) .ServerUri, оттуда используйте метод VersionControlServer.GetWorkspace, чтобы захватить рабочее пространство, а затем вызвать метод Workspace.Cloak, чтобы скрыть предметы, найденные вами, с помощью метода VersionControlServer.GetItems.

Пример, который приходит довольно близко, можно найти здесь:

+0

Этот ответ указал мне в правильном направлении. Ниже вы найдете мое предлагаемое решение. – Rickson

0

В PowerShell, это безопасно и легко:

PS> $l = ls 
# filter $l as needed 
PS> $l |%{ tf workfold /cloak $_.name } 
Смежные вопросы