我正在尝试获取特定变更集中的文件列表,然后从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
中的文件全部复制到一个位置的任何路径 - 我不需要保留文件夹路径。
答案 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;
我每天都学到新东西。