aeleen
Goto Top

Dateiowner über for-schleife auslesen und in Text-Datei ausgeben

Hallo, ich beschäftige mich erst seit kurzem mit der Kommandozeile und habe nun noch eine Frage an der ich leider selbst nicht weiterkomme.

Ich benutze derzeit die Kommandozeile unter Windows XP und habe bisher den DIR-Befehl über folgende For-Schleife:

For /f "delims=" %i in ('dir /s /q /T:A /-C /b C:\ pfad\zur\datei/dateiname\*.*') do @echo %~dpnxi;%~zi;%~ti;%~nxi; >> C:\Ausgabe.txt

ausgeben lassen.

Ich benötige eine Textdatei in der folgende Spalten vorkommen sollen, jeweils durch semikolon getrennt:

[PfadzurDatei\Dateiname;Dateigroesse;Datum&Uhrzeit;Dateiname.Dateiendung;DateiOwner]
Bisherige Ausgabe:
C:\ PfadzurDatei\Dateiname;32768;11.11.2008 11:56; Dateiname.doc;

Mir fehlt nun noch der Übergabeparameter für den DateiOwner. Ich hoffe es hat jemand eine Idee.

Dazu nur kurz: ich möchte das komplette Abteilungslaufwerk, in eine Textdatei auslesen um es in einem anderen System auszuwerten. Dazu brauche ich eben auch den Besitzer jeder Datei.

Hoffe sehr auf rasche Hilfe.

Vielen Dank im Voraus.

Content-Key: 120084

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

Printed on: April 25, 2024 at 01:04 o'clock

Member: mexx
mexx Jul 09, 2009 at 09:13:20 (UTC)
Goto Top
Es gibt zwei Gründen, weshalb Du Dein Vorhaben mit Powershell machen solltest.

1. Die Commandoshell ist ein Auslaufmodell und kann im Vergleich zu Powershell nichts! (Sorry an alle CMD-Liebhaber)
2. Mit Powershell ist Dein vorhaben auch mit einer Zeile umsetzbar samt allen Eigenschaften der Datei inkl. der Ausgabe als CSV Datei, welche für Deine Auswertung vielleicht wichtiger ist.

Wenn Du Powershell verwenden willst, helfe ich Dir gerne bei der Umsetzung Deines Vorhabens. Vielleicht sollten wir Deine angestrebte Auswertung mal näher beleuchten. Was willst Du auswerten? Wie willst Du auf das Ergebnis reagieren?

Lg mexx
Member: Aeleen
Aeleen Jul 09, 2009 at 10:34:20 (UTC)
Goto Top
Zitat von @mexx:
Es gibt zwei Gründen, weshalb Du Dein Vorhaben mit Powershell
machen solltest.

Ich weiß nicht ob ich die Powershell hier installieren darf.

Da ich sonst keine Resonanz auf meine Frage erhalten habe, würde ich es gerne mit der Powershell probieren.
Es scheint dann wirklich keine einfache Lösung mit der Kommandozeile zu geben.

1. Die Commandoshell ist ein Auslaufmodell und kann im Vergleich zu
Powershell nichts! (Sorry an alle CMD-Liebhaber)
2. Mit Powershell ist Dein vorhaben auch mit einer Zeile umsetzbar
samt allen Eigenschaften der Datei inkl. der Ausgabe als CSV Datei,
welche für Deine Auswertung vielleicht wichtiger ist.

Wenn Du Powershell verwenden willst, helfe ich Dir gerne bei der
Umsetzung Deines Vorhabens. Vielleicht sollten wir Deine angestrebte
Auswertung mal näher beleuchten. Was willst Du auswerten? Wie
willst Du auf das Ergebnis reagieren?

Also mit Auswertung wollte ich eigentlich die Textdatei in SAS importieren, um damit dann pro User den Speicherplatzverbrauch auszugen, alte Dateien identifizieren, allgemein die Struktur unseres Abteilungslaufwerks ansehen. Das alles vor dem Hintergrund einer späteren Bereinigung des Laufwerks.

Ich benötige dafür eben, den Pfad, die Datei bzw. Dateinamen incl. Dateierweiterung, Speicherplatz, Datum/Zeitstempel, und eben diesen noch fehlenden Dateiowner und alles Zeilenweise und jeweils durch Semikolon getrennt.

Vielen Dank für die schnelle Antwort.

Lg, Aeleen



Lg mexx
Mitglied: 80220
80220 Jul 09, 2009 at 11:05:28 (UTC)
Goto Top
Du kannst das Ergebnis aus der ersten for-Schleife an eine Subroutine übertragen mit call :process "%"

Im Dir-Befehl sind imo nur die Parameter /B und /S wirksam, denn die Anzeige des letzen Zugriffs beinhaltet üblicherweise lediglich das Datum und keine Zeitangabe. face-smile

In der Subroutine kannst du dann aus dem übergebenen Parameter %1 deine Variablen aufbauen und anschließend mit showacls aus den Ressource Kit Tools den
"ERSTELLER-BESITZER" ebenfalls mit einer for-Schleife ermitteln. Das Ergebnis schreibst du in eine .csv und brauchst keine Powershell zu installieren. face-wink
Member: Biber
Biber Jul 09, 2009 at 12:45:53 (UTC)
Goto Top
Moin aeleen,

willkommen im Forum.

Falls Du doch einfach Deine CMD-Zeile um ein paar Zeichen erweitern willst, dann ersetze denn Teil nach dem "DO..." so:

For /f "delims=" %i in ('dir /s /q /T:A /-C /b C:\ pfad\zur\datei/dateiname\*.*') do ...
--> jetzt dahinter eine "DIR /Q" (DIR mit OWNER-Anzeige)

 For /f "delims=" %i in ('dir /s /q /T:A /-C /b C:\ pfad\zur\datei/dateiname\*.*') do...  
 @For /f "tokens=4" %a in ('dir /q "%i"^|find /i "%~nxi"') do @echo %~dpni;%~zi;%~ti;%~nxi;%a;   
Dann hast Du es wie gewünscht.

Ich nutze also deinen bisherigen Befehl, der ja ALLE Dateien mit der Suchmaske "*.*" liefert
und führe danach auf die EINZELNE Datei das DIR /Q nach derselben Mimik (auch in einer FOR/F-Anweisung ausgewertet) aus.

Grüße
Biber
Mitglied: 80220
80220 Jul 09, 2009 at 13:09:43 (UTC)
Goto Top
@Biber
den /Q Parameter kannte ich noch nicht, den habe ich glatt übersehen. face-smile

Aber meinen Hinweis zum /T-Parameter hast du leider überlesen, der funktioniert nämlich nicht im Zusammenhang mit /B face-devilish
Member: Aeleen
Aeleen Jul 09, 2009 at 14:49:20 (UTC)
Goto Top
Herzlichen Dank - habe es gerade ausprobiert und es funktioniert. Danke für die unkomplizierte Lösung.

Lg, Aeleen
Member: Biber
Biber Jul 09, 2009 at 15:10:40 (UTC)
Goto Top
Moin dumdideldum & Aeleen,


@80220
Ja, stimmt, Deine "DIR /T"-parameter-Anmerkung habe ich überlesen. Sorry.

@Aeleen
Aber, falls Du wirklich das "DIr /t:a"/Letzte Zugriffsdatum brauchst... ginge auch mit den beiden FOR-Anweisungen

  • mit der ersten "FOR/F in DIR"-Anweisung wie oben stehend ein "DIR /B /S" über alles und über alle Ebenen
  • mit der zweiten wie oben stehende ein "DIR /Q" auf jede einzelne Datei + zusätzlich dort den /T:a-Schalter einbauen
  • und von dieser zweiten Ausgabe nicht nur das 4. Token (OWNER), sondern auch Token 1 & 2 (Datum/Uhrzeit) verwerten.

Die zweite FOR /F-Anweisung sollte dann so aussehen:
.... @for /f "tokens=1-4" %a in ('dir /q "%i"^|find /i "%~nxi"') DO....
... wobei dann sein wird:
%a = Datum letzter Zugriff
%b = Zeit letzter Zugriff
%d = Owner der Datei
^^ Setzt Du noch einen grünen Haken dran bitte und schreibst nie wieder "Vielen Dank im voraus" hier?

Grüße
Biber
Member: Aeleen
Aeleen Jul 09, 2009 at 15:15:13 (UTC)
Goto Top
Zitat von @Biber:
Moin dumdideldum & Aeleen,


@80220
Ja, stimmt, Deine "DIR /T"-parameter-Anmerkung habe ich
überlesen. Sorry.

@Aeleen
Aber, falls Du wirklich das "DIr /t:a"/Letzte Zugriffsdatum
brauchst... ginge auch mit den beiden FOR-Anweisungen

  • mit der ersten "FOR/F in DIR"-Anweisung wie oben stehend
ein "DIR /B /S" über alles und über alle Ebenen
  • mit der zweiten wie oben stehende ein "DIR /Q" auf jede
einzelne Datei + zusätzlich dort den /T:a-Schalter einbauen
  • und von dieser zweiten Ausgabe nicht nur das 4. Token (OWNER),
sondern auch Token 1 & 2 (Datum/Uhrzeit) verwerten.

Die zweite FOR /F-Anweisung sollte dann so aussehen:
> .... @for /f "tokens=1-4" %a in ('dir /q
"%i"^|find /i "%~nxi"') DO....
... wobei dann sein wird:
%a = Datum letzter Zugriff
%b = Zeit letzter Zugriff
%d = Owner der Datei
^^ Setzt Du noch einen grünen Haken dran bitte und schreibst nie
wieder "Vielen Dank im voraus" hier?

in Ordnung Biber, ist bestimmt, weil ich auf der Arbeit immer so förmlich Briefe schreibe. face-smile

Grüße
Biber