为什么此PowerShell脚本要从根目录中删除svn:mergeinfo?

为什么此PowerShell脚本要从根目录中删除svn:mergeinfo?,svn,powershell,Svn,Powershell,我们有一个脚本可以从Subversion工作副本中的所有文件夹中删除svn:mergeinfo属性,但不能从工作副本根目录本身中删除。它目前是一个通过单独的批处理文件调用的NAnt构建脚本,所以我尝试用一个更简单的PowerShell脚本来替换它。我尝试过三次,从天真到稍微复杂。这三个都不符合我的条件,输出一行属性“svn:mergeinfo”“deleted from.”。 检查工作副本根目录的SVN属性表明SVN:mergeinfo属性确实已从此文件夹中删除,这不是我想要的。每个版本都设计为

我们有一个脚本可以从Subversion工作副本中的所有文件夹中删除svn:mergeinfo属性,但不能从工作副本根目录本身中删除。它目前是一个通过单独的批处理文件调用的NAnt构建脚本,所以我尝试用一个更简单的PowerShell脚本来替换它。我尝试过三次,从天真到稍微复杂。这三个都不符合我的条件,输出一行
属性“svn:mergeinfo”“deleted from.”。

检查工作副本根目录的SVN属性表明SVN:mergeinfo属性确实已从此文件夹中删除,这不是我想要的。每个版本都设计为从工作副本根目录运行

尝试1:

# I understand why this one fails, it's a poor attempt.
Get-ChildItem -Recurse | svn propdel svn:mergeinfo -R $_
尝试2:

# This one correctly lists everything except the working copy root, but
# still removes the svn:mergeinfo property from the working copy root.
Get-ChildItem -Recurse -Exclude $pwd | svn propdel svn:mergeinfo -R $_
尝试3:

# Again, this one works fine until the svn propdel is added.
Get-ChildItem | ForEach-Object { ls -R $_ } | svn propdel svn:mergeinfo -R $_

关于我的逻辑中的缺陷在哪里有什么想法吗?

svn
是一个外部应用程序,您不能直接使用PowerShell管道技术。我不熟悉
svn
语法,在细节上可能有错误,但您的所有命令可能都应该使用
ForEach对象
()。即:

... | %{ svn propdel svn:mergeinfo -R $_ }

然后,
svn
应该正确地“理解”
$\uu
。此外,您很可能应该使用类似于
$$\uU0.FullName
$\uName
的内容,而不是
$\uCode>(同样,因为
svn
是一个外部应用程序,它需要一个字符串(例如
$\uU0.FullName
/
$\uName
),而不是一个对象
$\uCode>)。注意:
$\uu
通常会按预期自动转换为字符串,但情况并非总是如此。

很好的捕获,谢谢。那么,我还需要期中考试吗?foreach对象{ls-R%}?第二次尝试似乎更好、更简洁,可以正确地使用此修复程序。好吧,没有
%\uuu
构造。无论如何,我建议你自己做一点实验。使用
cmd
而不是
svn
。|%{cmd/c echo$\ uu.FullName}
等等,看看你能得到什么。如果
svn
可以接受
-R
之后的参数列表,那么还有其他解决方案;我的意思是
$\uu
。谢谢你的提示。