将文件从TFS 2010复制到任意文件夹

时间:2013-12-11 19:31:44

标签: powershell tfs2010

我正在尝试获取特定变更集中的文件列表,然后从TFS中提取它们并放置在不是我本地工作空间的任意文件夹中。

到目前为止,我能够解析从互联网上找到的代码集合中更改的文件。现在,我想要做的是复制这些文件并放入“C:\ mypath \ tostuff \ toworkon”。

以下是我获取文件的方式:

param(
     [Parameter(Mandatory=$True)]
     [string] $changesets = $(throw 'Usage: Get-Changeset-Files ''changesets'''),
     [Parameter(Mandatory=$False)]
     [string] $path,
     [Parameter(Mandatory=$False)]
     [string] $VOSversion,
     [Parameter(Mandatory=$False)]
     [string] $environment
)

process
{
     # get TFS object
     $tfs = get-tfs;

     # build up list of file items    
     $fileItems = @();

     $changesets.Split(',') | foreach {
       $tfs.vcs.GetChangeset($_).Changes | foreach {
           if($path.length -gt 0) {
               if($_.Item.ServerItem.Contains($path)) {
                   if($fileItems -notcontains $_.Item.ServerItem) {
                       $fileItems += $_.Item.ServerItem;
                   }
               }
           } else {
               if($fileItems -notcontains $_.Item.ServerItem) {
                   $fileItems += $_.Item.ServerItem;
               }
           }
       }
     }

   $downloadFolder = 'C:\mypath\tostuff\toworkon'
   foreach ($element in $fileItems) {
    $fileItem = $tfs.vcs.GetItem($element);
    $contents = ( [io.streamreader]$fileItem.DownloadFile() ).ReadToEnd();
    $contents.CopyTo();
   }

   return $fileItems | Sort-Object;

}

我的问题是$contents.CopyTo()部分。我知道这不对。这是我坚持的部分。我的目标是将$contents中的文件全部复制到一个位置的任何路径 - 我不需要保留文件夹路径。

1 个答案:

答案 0 :(得分:0)

进一步挖掘并意识到你不能真正做$var1 + "\" + $var2并让它表现得像我以为我来到这个解决方案:

if(Test-Path -Path $downloadFolder ){
    if (!($downloadFolder.EndsWith("\"))) {
        $targetFolder = $downloadFolder + "\";
    } else {
        $targetFolder = $downloadFolder;
    }

    #echo $targetFolder;
    foreach ($element in $fileItems) {
        $fileItem = $tfs.vcs.GetItem($element);
        $elementSplit = $element.Split('/');
        $fileName = $elementSplit[$elementSplit.length - 1];
        echo $fileName;
        $contents = ( [io.streamreader]$fileItem.DownloadFile() ).ReadToEnd();
        #echo $targetFolder$fileName;
        $contents | Out-File $targetFolder$fileName -Force;
    }
}

重要的部分是:

$contents | Out-File $targetFolder$fileName -Force;

我每天都学到新东西。