使用Ant获取Windows上的文件所有者

时间:2016-12-07 09:24:24

标签: windows ant

我正在编写一个构建非常简单的交付单的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对我来说是新的,但我还没有得到它。

2 个答案:

答案 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