Aus einem Verzeichnis bestimmte Inhalte von Dateien extrahieren und sortiert in eine Datei schreiben.
Hallo,
ich komme mit dem Script nicht weiter. Auch die Suche in den Foren brachte letztendlich keinen Erfolg.
Deshalb hoffe ich hier auf Unterstützung.
Folgende Ausgangssituation:
Über ein Loginscript werden je PC und User verbundene Netzlaufwerke
jeweils in eine Datei "n.%computername%(%username%).txt" geschrieben.
Z.B.
Inhalt von n.pc1(user1).txt
26.04.2011
I: \\srv01\share-a
J: \\srv01\share-b
K: \\srv02\share-x
L: \\srv02\share-y
27.04.2011
I: \\srv01\share-a
J: \\srv01\share-b
K: \\srv02\share-x
L: \\srv02\share-y
Inhalt von n.pc2(user1).txt
26.04.2011
K: \\srv01\share-a
27.04.2011
K: \\srv01\share-a
Inhalt von n.pc2(user2).txt
26.04.2011
I: \\srv01\share-a
J: \\srv01\share-b
K: \\srv02\share-x
L: \\srv02\share-y
27.04.2011
I: \\srv01\share-a
J: \\srv01\share-b
K: \\srv02\share-x
L: \\srv02\share-y
Solche gibt es zu Hauf in dem Verzeichnis mit entsprechendem Inhalt.
Wobei sie noch variieren mit gleichen %computername% aber unterschiedlichen
%username%, Inhalt entsprechend ebenfalls.
Ich möchte nun eine Datei erstellen lassen, die evtl. so aussieht bzw. was
ich daraus entnehmen könnte:
Folgendes Script bringt mir noch nicht das gewünschte Ergebnis.
Wobei Zeile 2 mir die Ausgangsdatei zerschiesst.
Zeile 3 dient als Überschrift.
4, 5 oder 6 als entsprechende Variante. (ungenügende).
Ich brauch hierbei dringend Hilfe um zum obigen Ergebnis zu kommen. Im "Inhalt" jeder Datei
sind die Angaben mehrfach vorhanden. Ich möchte diese aber nur jeweils einmal haben.
Grüße
mag
ich komme mit dem Script nicht weiter. Auch die Suche in den Foren brachte letztendlich keinen Erfolg.
Deshalb hoffe ich hier auf Unterstützung.
Folgende Ausgangssituation:
Über ein Loginscript werden je PC und User verbundene Netzlaufwerke
jeweils in eine Datei "n.%computername%(%username%).txt" geschrieben.
Z.B.
Inhalt von n.pc1(user1).txt
26.04.2011
I: \\srv01\share-a
J: \\srv01\share-b
K: \\srv02\share-x
L: \\srv02\share-y
27.04.2011
I: \\srv01\share-a
J: \\srv01\share-b
K: \\srv02\share-x
L: \\srv02\share-y
Inhalt von n.pc2(user1).txt
26.04.2011
K: \\srv01\share-a
27.04.2011
K: \\srv01\share-a
Inhalt von n.pc2(user2).txt
26.04.2011
I: \\srv01\share-a
J: \\srv01\share-b
K: \\srv02\share-x
L: \\srv02\share-y
27.04.2011
I: \\srv01\share-a
J: \\srv01\share-b
K: \\srv02\share-x
L: \\srv02\share-y
Solche gibt es zu Hauf in dem Verzeichnis mit entsprechendem Inhalt.
Wobei sie noch variieren mit gleichen %computername% aber unterschiedlichen
%username%, Inhalt entsprechend ebenfalls.
Ich möchte nun eine Datei erstellen lassen, die evtl. so aussieht bzw. was
ich daraus entnehmen könnte:
_____pc1/user1 | #ein User mit seinem PC und verbundenen Laufwerken |
I: \\srv01\share-a | |
J: \\srv01\share-b | |
K: \\srv02\share-x | |
L: \\srv02\share-y | |
_____pc2/user1 | #der gleiche User am anderen PC mit falsch verbundenem Laufwerk |
K: \\srv01\share-a | |
_____pc2/user2 | #ein anderen User am obigen PC mit richtig verbundenen Laufwerken |
I: \\srv01\share-a | |
J: \\srv01\share-b | |
K: \\srv02\share-x | |
L: \\srv02\share-y |
Folgendes Script bringt mir noch nicht das gewünschte Ergebnis.
for /f %%i in ('dir /o /b *.txt') do (
rem sort %%i /o %%i
for /f "delims=.() tokens=2,3" %%a in ('echo %%i') do echo _____%%a/%%b >> %~n0.log
rem for /f "delims=" %%x in ('sort %%i') do @findstr "%%x" "%~n0.log">nul || @echo %%x >> %~n0.log
rem for /f "delims=" %%x in ('sort %%i') do @findstr /C:": \\" "%~n0.log">nul || @echo %%x >> %~n0.log
rem findstr /C:": \\" %%i >> %~n0.log
echo. >> %~n0.log
)
Wobei Zeile 2 mir die Ausgangsdatei zerschiesst.
Zeile 3 dient als Überschrift.
4, 5 oder 6 als entsprechende Variante. (ungenügende).
Ich brauch hierbei dringend Hilfe um zum obigen Ergebnis zu kommen. Im "Inhalt" jeder Datei
sind die Angaben mehrfach vorhanden. Ich möchte diese aber nur jeweils einmal haben.
Grüße
mag
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 165347
Url: https://administrator.de/contentid/165347
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo mag-lion!
Versuch's mal so (nur oberflächlich getestet):
Grüße
bastla
Versuch's mal so (nur oberflächlich getestet):
@echo off & setlocal
set "Log=%~n0.log"
set "TLog=%temp%\%Log%.tmp"
del "%Log%" 2>nul
for /f %%i in ('dir /o /b *.txt') do (
for /f "delims=.() tokens=2,3" %%a in ("%%i") do >"%TLog%" echo _____%%a/%%b
for /f "delims=" %%x in ('findstr /C:": \\" "%%i"') do findstr "%%x" "%TLog%">nul||>>"%TLog%" echo %%x
>>"%Log%" sort "%TLog%"
>>"%Log%" echo.
)
del "%TLog%"
bastla
moin,
ich hätte da eine Idee, aber die "spinn" ich erst weiter - wenn du uns den Grund nennst, warum du das so haben willst.
Diese Datei(en) erzeugst du ursprünglich ~ so?
gruß
ich hätte da eine Idee, aber die "spinn" ich erst weiter - wenn du uns den Grund nennst, warum du das so haben willst.
Diese Datei(en) erzeugst du ursprünglich ~ so?
for /f "tokens=2,3" %a in ('net use^|find ":"') do echo %a;%b
gruß
Hallo mag-lion!
Freut mich, wenn's soweit passt ...
Wenn ich, so wie T-Mo es zumindest andeutet, schon bei der Erstellung der Logs ansetzen könnte (und nicht die bereits Vorhandenen verarbeiten muss), würde ich zumindest vollständige Datensätze verwenden - also zusätzlich Rechnername, Username, Datum getrennt (CSV) in jeder Zeile mit ausgeben, weil damit die Nachbearbeitung (Sortierung, Gruppenverarbeitung) vereinfacht wird - und maximal eine Datei je Rechner erstellen ...
Grüße
bastla
Freut mich, wenn's soweit passt ...
Wenn ich, so wie T-Mo es zumindest andeutet, schon bei der Erstellung der Logs ansetzen könnte (und nicht die bereits Vorhandenen verarbeiten muss), würde ich zumindest vollständige Datensätze verwenden - also zusätzlich Rechnername, Username, Datum getrennt (CSV) in jeder Zeile mit ausgeben, weil damit die Nachbearbeitung (Sortierung, Gruppenverarbeitung) vereinfacht wird - und maximal eine Datei je Rechner erstellen ...
Grüße
bastla
moin,
na da bin ich aber froh, dass ich keinen Aufsatz gemalt habe
Aber........
Abhängig davon, würde ich das so skizzieren:
Zu mehr als einer Skizze werde ich heute wegen Vollem Programm nicht kommen...
edit - nein doch eher so...
Und wo du die speicherst - ist dir überlassen - ich fand den Ansatz - ohne zu wissen wie Ihr da werkelt - logisch.
Mit einem dir /b /s map.txt und wenigen Servern wäre da ja kein Ding - aber hat der User da nur leserechte - wäre das ein Griff in den gekachelten Raum.
Ich schrub doch - ich hab grad selber ein volles Programm und da Bastla auch im Boot ist - dachte ich - schreibs runter - dann habt ihr beide und ff. was zum diskutieren.
Freut mich aber, das du mitdenkst.
</edit2>
/edit
Und dann Freigabe für Freigabe durchschauen, statt User für User...
(Du ahnst es - dazu kannst du das Logfile benutzen net group /?)
Gruß
na da bin ich aber froh, dass ich keinen Aufsatz gemalt habe
Aber........
- Kannst du uns noch ein paar Infos geben...
- habt Ihr Gruppen?
- wieviele User?
- überall identische Geräte - bis jetzt ist dein Logfile ja nur mit Netzwerklaufwerken und "I" ist verdächtig nahe an irgendwelchen USB mehrfach Kartenlesern dran.
Abhängig davon, würde ich das so skizzieren:
Zu mehr als einer Skizze werde ich heute wegen Vollem Programm nicht kommen...
- mit der obigen Skizze ~ so weiterwerkeln...
for /f "tokens=2,3" %a in ('net use^|find ":"') do echo %a;%username%;%computername%;%date%>>%b\map.txt
Ach ja, n: gibt es noch nicht.
<edit 2>:
nein - weil ich nicht mal eben in allen meinen gemappten Laufwerken eine Datei haben wollte, hab ich das nur mit n: getestet und das hier gutverbergt.Und wo du die speicherst - ist dir überlassen - ich fand den Ansatz - ohne zu wissen wie Ihr da werkelt - logisch.
Mit einem dir /b /s map.txt und wenigen Servern wäre da ja kein Ding - aber hat der User da nur leserechte - wäre das ein Griff in den gekachelten Raum.
Ich schrub doch - ich hab grad selber ein volles Programm und da Bastla auch im Boot ist - dachte ich - schreibs runter - dann habt ihr beide und ff. was zum diskutieren.
Freut mich aber, das du mitdenkst.
</edit2>
for /f "tokens=2,3" %a in ('net use^|find ":"') do findstr /i /c:"%a;%username%;%computername%;" "%b\map.txt" ||echo %a;%username%;%computername%;%date%>>%b\map.txt
Und dann Freigabe für Freigabe durchschauen, statt User für User...
- Je nachdem ob oder ob Ihr keine Gruppen habt - dann nach der Liste Gruppen anlegen.
(Du ahnst es - dazu kannst du das Logfile benutzen net group /?)
Gruß
Besser als eine geschriebene Skizze
Nur damit du es mitbekommst - ich hab da oben Besuch von Tante Edit ...
Gruß