2016-12-07 76 views
0

我正在編寫一個構建非常簡單的傳遞說明的ant函數。我試圖跟蹤的一件事是文件的所有者。由於這是一個Win解決方案,我唯一能想到的就是使用exec任務對文件執行dir/q操作,然後從列表中取出文件所有者。我需要跳過第5行,然後拔出用戶名\之後使用Ant在Windows上獲取文件所有者

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,但正則表達式是新的給我,至今我還沒有感覺到它的存在。

回答

0

不知道如何在Ant中工作,但要獲得用戶和文件名,您可以使用.*\/.*?(\w+\\\w+) *(.*)作爲正則表達式。 然後,在Windows輸出上運行它後,用戶將在$ 1和$ 2的文件名。

你可以在這裏嘗試一下:https://regex101.com/r/9RGqLz/6

+0

謝謝,這是非常有幫助的。 – dazednconfused

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 
+0

謝謝。我明白你的觀點。在這種情況下,我會堅持使用dir/q,純粹是因爲它沒有引入帶有外殼的'新'項目。最終,我將不得不改變它並添加Linux命令,因此可能會執行它。 謝謝:) – dazednconfused