peter32
Goto Top

Aktueller Besitzer der aktuellen Datei herausfinden und in Variable schreiben

Hallo,

ich habe über
Besitzer einer Datei herausfinden

erfahren, dass es den Befehl "dir /q" gibt, der mir schön alle Besitzer auflistet im aktuellen Ordner.

Ich glaube ich bin mit meinem Code auch schon sehr nahe dran, allerdings komme ich nicht drauf, den Besitzer mit in eine Variable zu schreiben:

  	for /f "delims=" %%a in ('dir /od /b "C:\Folder"') DO (   
			set "Variable1=%%a"  
			call :SomeOtherScript
		) 

Ich glaube, ich muss nur irgendwie den Code SINNGEMÄß so hinkriegen:

  	for /f "delims=" %%a in ('dir **/q** /od /b "C:\Folder"') DO (   
			set "Variable1=%%a"  
			**set "Variable2=%%b"**  
			call :SomeOtherScript
		) 

Wobei Variable2 hier der aktuelle Besitzer sein soll.

Wisst ihr, wie ich das richtig hinbekomme?

Danke im Voraus!

LG
Peter

Content-Key: 317878

Url: https://administrator.de/contentid/317878

Printed on: May 9, 2024 at 02:05 o'clock

Mitglied: 131026
Solution 131026 Oct 14, 2016 updated at 19:09:23 (UTC)
Goto Top
Powershell -Executionpolicy ByPass -Command "(Get-Acl 'c\datei.txt').Owner"  
Gruß R.
Member: Pjordorf
Pjordorf Oct 14, 2016 at 13:05:50 (UTC)
Goto Top
Hallo,


Zitat von @Peter32:
allerdings komme ich nicht drauf
Was passiert denn oder passiert denn nicht? Oder erwartest du das wir uns alle deinen Fehler selbst generieren? Keiner weiss wo dieser Schnipsel welcher ja nur ein teil deines Problems ist herkommt oder was drum herum noch alles passiert und evtl. schon das Problem ist.
http://ss64.com/nt/delayedexpansion.html
Batch Anfänger Fragen zu setlocal, enabledelayedexpansion, set, for

Gruß,
Peter
Member: Peter32
Peter32 Oct 17, 2016 at 14:47:38 (UTC)
Goto Top
Danke ranger das funktioniert soweit sogut!

Allerdings habe ich (glaube ich) einen ziemlich umständlichen Weg gewählt, um nun diesen Besitzer ohne Computername in die "Owner"-Variable zu schreiben:

@echo off & setlocal EnableDelayedExpansion
Powershell -Executionpolicy ByPass -Command "(Get-Acl 'C:\file.txt').Owner">owner.txt  

set "filename=owner.txt"  
set "tempfile=ownertmptxt.txt"  
for /F "delims=" %%a in (!filename!) do (  
set text=%%a
set text=!text:PC-Name\=!
echo !text!>>!tempfile!
)
del !filename!  >NUL
set /p "Owner="<"ownertmptxt.txt"    
del !tempfile!  >NUL
echo Der Besitzer lautet: !Owner!
pause

Geht das auch irgendwie etwas effektiver?
Mitglied: 131026
Solution 131026 Oct 17, 2016 updated at 15:37:43 (UTC)
Goto Top
Wie immer bei sowas: Mit FOR-Schleife kappseln:
for /f "delims=" %%a in ('Powershell -Executionpolicy ByPass -NoProfile -Command "(Get-Acl 'c\datei.txt').Owner.split('\')[1]"') do set "owner=%%a"  
Member: Peter32
Peter32 Oct 17, 2016 at 15:05:16 (UTC)
Goto Top
Super das ist weniger Code!
Allerdings habe ich hier das Problem, dass nach wie vor der PC-Name mit ausgegeben wird. Ich brauche allerdings nur den tatsächlichen Benutzernamen.

Zudem: Bei meiner Maschine dauert es ca 10s bis dieser Befehl ausgeführt wird. Gibt es noch einen schnelleren weg?
Mitglied: 131026
131026 Oct 17, 2016 updated at 15:38:54 (UTC)
Goto Top
Zitat von @Peter32:
Allerdings habe ich hier das Problem, dass nach wie vor der PC-Name mit ausgegeben wird.
Im letzten Post so geändert das es passt face-smile, keine große Sache.
Zudem: Bei meiner Maschine dauert es ca 10s bis dieser Befehl ausgeführt wird. Gibt es noch einen schnelleren weg?
Dein Rechner ist zu langsam. Habe oben noch den Parameter -NoProfile hinzugefügt. Geht hier in unter einer Sekunde.
Member: Peter32
Peter32 Oct 17, 2016 at 15:44:09 (UTC)
Goto Top
Super so passt das perfekt! Danke!

Allerdings verstehe ich einfach nicht, wieso es auf meinem Rechner so langsam läuft. Okay ich habe viele Programme im Hintergrund mit hoher CPU Auslastung laufen, aber kann ich denn nicht irgendwie sagen, dass mein Powershell Script bzw. Batch-Programm irgendwie trotzdem höhere Priorität hat? Ich hatte da mal was gelesen von wegen Priorität ändern, aber das hatte auch nur mäßigen Erfolg...
Mitglied: 131026
131026 Oct 17, 2016 updated at 15:46:43 (UTC)
Goto Top
Du solltest deine Skripte schnellstens zu nativer Powershell migieren. Wird höchste Eisenbahn sich damit auseinanderzusetzen.
Member: Peter32
Peter32 Oct 17, 2016 at 15:50:50 (UTC)
Goto Top
Das geht leider nicht, dafür fehlen mir die ressourcen leider face-confused anderen tipp?
Mitglied: 131026
131026 Oct 17, 2016 updated at 15:53:16 (UTC)
Goto Top
Zitat von @Peter32:
Das geht leider nicht, dafür fehlen mir die ressourcen leider face-confused
Hahaha.. der war gut face-big-smile face-big-smile, wohl die Ressourcen im Oberstübchen was face-smile [sarkasmus ende]
anderen tipp?
Mehr "Ressourcen" einbauen.
Member: colinardo
colinardo Oct 17, 2016 updated at 16:14:04 (UTC)
Goto Top
Hallo Peter32,
würde auch zu Powershell raten. Wenn du Performance-Probleme hast, die lassen sich lösen wenn du deine Hardware und dein OS entsprechend optimierst.

Es gibt noch eine VBS Variante für den Einbau in deine Batch:
@echo off & setlocal
set "datei=C:\deinedatei.txt"  
echo Dim objSD : GetObject^("winmgmts://./root/cimv2"^).Get^("Win32_LogicalFileSecuritySetting='" ^& wscript.arguments(0) ^& "'"^).GetSecurityDescriptor objSD : WScript.Echo objSD.Owner.Name >"%Temp%\GetOwner.vbs"  
for /f "delims=" %%a in ('cscript //NOLOGO "%Temp%\GetOwner.vbs" "%datei%"') DO set "owner=%%a"  
echo Owner of "%datei%" : "%owner%"  
Auch mein Tipp, steige um. Du wirst um mindestens 500% effektiver in der Bewältigung von administrativen Aufgaben.

Grüße Uwe