为多个文件设置svn propset关键字

时间:2013-11-18 16:21:22

标签: svn powershell batch-file

我必须在超过9000个文件上通过svn propset设置svn:keywords。我的第一个想法是每次使用for循环来调用svn propset。问题是:这真的很慢。操作系统必须为每个文件创建一个进程。我想阻止这一点。

所以,我的第二个想法是给svn命令一个包含文件名的文件。但是SVN并不接受这一点。

我正在使用powershell脚本来获取所有文件。我的第三个想法是使用管道或重定向一个文件/命令的输出作为另一个文件/命令的输入。但这也不起作用。

$fileList = "fileList.txt"
Out-File -filePath $fileList -inputObject ""
$files = Get-ChildItem . -recurse -include *.java,*.xml,*.properties,*.sql,*.ps1,*.bat | Where-Object {!($_.psIsContainer)}
foreach($file in $files) {
    Out-File -filePath $fileList -inputObject $file.fullname -append
}
Write-Host "Alle Dateien gefunden. Setze jetzt die SVN Property."
svn propset svn:keywords "LastChangedDate LastChangedRevision LastChangedBy Id HeadURL Revision Author Date"<$fileList

我的最后一个想法是创建一个包含所有文件的一个STRING。但是所有文件名(带绝对路径)大约需要1,200万个字符。我试过了,但它已经没有足够的可用空间了。

我现在能做什么? SVN propset有一个参数“--targest”,但这不起作用。我不知道为什么。

映入眼帘,

布拉克

1 个答案:

答案 0 :(得分:1)

如果单个字符串中有多个文件,但无法一次处理它们,您可以使用Get-Content的-ReadCount参数将它们分解为可管理的批次。

Get-Content $filelist -ReadCount 100 |
 foreach-object {
                 $filebatch = $_ -join ','
                }

一次读取100个文件名,将它们加入逗号分隔列表,然后您可以预先通过这些批次。