2016-12-07 3 views
0

Ich schreibe eine Ameisenfunktion, die einen sehr einfachen Lieferschein erstellt. Eines der Dinge, die ich verfolgen möchte, ist der Besitzer einer Datei. Da dies eine Win-Lösung ist, ist das Einzige, was ich mir vorstellen kann, eine Exec-Task zu verwenden, um ein Verzeichnis/q zu einer Datei zu machen und dann den Dateibesitzer aus der Auflistung herauszuführen. Ich brauche die ersten 5 Zeilen ziehen Sie dann den Benutzernamen nach dem \Erhalte Dateibesitzer unter Windows mit Ant

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 

Leider egal zu überspringen, was ich in der reqexp tun Ich bin kein Spiel bekommen, aber regexp ist neu für mich und bis jetzt habe ich es nicht verstanden.

Antwort

0

Nicht sicher, wie das in Ant funktioniert, aber um den Benutzer und den Dateinamen zu erhalten, können Sie .*\/.*?(\w+\\\w+) *(.*) als die Regex verwenden. Dann, nach dem Ausführen auf der Windows-Ausgabe, wird der Benutzer in $ 1 und der Dateiname in $ 2 sein.

Sie können es hier versuchen: https://regex101.com/r/9RGqLz/6

+0

danke, das hat immens geholfen. – dazednconfused

0

die Ausgabe von dir /q mit regulären Ausdrücken Parsing ist fehleranfällig. Neue Versionen von Windows könnten ändern, was dir /q Ausgaben und Ant-Skripte könnten brechen.

Stattdessen betrachtet Powershell mit dem Besitzer der Datei zu erhalten:

> powershell "Get-Acl d:\test\zips\file.zip | foreach { $_.Owner.split('\')[1] }" 

Der obige Befehl gibt:

Administrators 

In einem Ant-Skript, dies zu:

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

Die obigen Skriptausgaben:

[echo] Owner: Administrators 
+0

danke. Ich verstehe deinen Standpunkt. In diesem Fall bleibe ich beim dir/q, nur weil es kein "neues" Element mit Power Shell einführt. Irgendwann werde ich es ändern und Linux-Befehle hinzufügen müssen, also kann es dann implementiert werden. Danke :) – dazednconfused