我正在编写一个构建非常简单的交付单的ant函数。我试图跟踪的其中一件事是文件的所有者。由于这是一个Win解决方案,我唯一能想到的就是使用exec任务对文件执行dir / q,然后从列表中挂钩文件所有者。我需要跳过前5行,然后在\
后面拉出用户名Volume in drive D is Data
Volume Serial Number is xxxx-yyyy
Directory of d:\test\zips
29/11/2016 13:19 32,706 SERVER\Administrators file.zip
1 File(s) 32,706 bytes
0 Dir(s) 151,247,241,216 bytes free
不幸的是,无论我在reqexp中做什么,我都没有得到任何匹配,但regexp对我来说是新的,但我还没有得到它。
答案 0 :(得分:0)
不确定在Ant中如何工作,但为了获取用户和文件名,您可以使用:visible
作为正则表达式。
然后在Windows输出上运行后,用户将为$ 1,文件名为$ 2.
您可以在此处试用:https://regex101.com/r/9RGqLz/6
答案 1 :(得分:0)
使用正则表达式解析dir /q
的输出容易出错。新版本的Windows可能会更改dir /q
输出和Ant脚本可能会中断的内容。
相反,请考虑使用PowerShell获取文件的所有者:
> powershell "Get-Acl d:\test\zips\file.zip | foreach { $_.Owner.split('\')[1] }"
以上命令输出:
Administrators
在Ant脚本中,这变为:
<exec executable="powershell" osfamily="windows" outputproperty="owner">
<arg value="Get-Acl d:\test\zips\file.zip | foreach { $_.Owner.split('\')[1] }"/>
</exec>
<echo>Owner: ${owner}</echo>
以上脚本输出:
[echo] Owner: Administrators