我编写了一个脚本,从svn仓库的svn info
命令中提取URL和Revision Number,并将结果保存在一个.txt文件中.$revision
和$url
都是字符串,所以replace方法应该对它们起作用,但它没有。是否可能是我的代码中有什么错误导致了这一点?
$TheFilePath = "C:\Users\MyPC\REPOSITORY\NewProject\OUTPUT.txt"
echo "#- Automatic Package Update `n----------"| Out-File -FilePath $TheFilePath
$url = svn info C:\Users\MyPC\REPOSITORY\NewProject\trunk | Select-String -Pattern 'URL' -CaseSensitive -SimpleMatch | select-object -First 1
$url | Add-Content -path $TheFilePath
$revision = svn info C:\Users\MyPC\REPOSITORY\NewProject\trunk | Select-String -Pattern 'Revision' -CaseSensitive -SimpleMatch | $revision.Replace('Revision','srcrev')
$revision | Add-Content -path $TheFilePath
下面是svn info的输出(无关的输出被省略了):
Path: .
Working Copy Root Path: C:\Users\MyPC\REPOSITORY\NewProject\trunk
URL: https://svn.mycompany.de/svn/NewProject/trunk
Relative URL: ^/trunk
Repository Root: https://svn.mycompany.de/svn/NewProject
Revision: 5884
下面是我在.txt文件中运行代码时得到的结果:
#- Automatic Package Update
----------
URL: https://svn.mycompany.de/svn/NewProject/trunk
Revision: 5884
----------
2条答案
按热度按时间8e2ybdfx1#
看看svn info here的输出示例和您刚才提供的示例,您应该可以使用
ConvertFrom-StringData
比使用Select-String
更容易地获得所需的信息.在PowerShell〈7.x中,您可以在将冒号(
:
)分隔符更改为等号(=
)后,对svn info
的输出使用ConvertFrom-StringData
,以获得包含所有属性和值的Hashtable。然后,使用计算属性,您可以提取感兴趣的项目并保存为CSV文件,例如:-replace
的正则表达式详细信息,仅替换第一个出现的冒号:如果您使用的是PowerShell 7或更高版本,则操作会变得更简单,因为您有一个额外的
-Delimiter
参数:vmdwslir2#
$revision
在svn
命令完成 * 之后 * 才存在。使用
ForEach-Object
cmdlet并将当前匹配引用为$_
,以内联方式修改输出对象-Select-String
输出中的匹配行存储在名为Line
的属性中: