Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Kann man die Zeilennummer aus einer Find-Abfrage als Skip-Argument für eine For-Abfrage nutzen? Nee, aber gibt es einen anderen Weg?

Frage Entwicklung Batch & Shell

Mitglied: Jochem

Jochem (Level 2) - Jetzt verbinden

13.05.2011 um 09:56 Uhr, 3430 Aufrufe, 2 Kommentare

Umgebung; W2K8-Domäne mit XP-Clients; Domäne läuft unter "Full-Service" eines RZ, daher hat der lokale Admin (ich) nicht Zugriff auf alle Funktionen Zur Identifikation der Benutzer, die eine Datei im Zugriff haben, wurde vom RZ eine (verschlüsselte) Batch-Routine geschrieben, welche die enstsprechenden Dateien und zugehörigen User auflistet. ich benötige aus dieser Datei aber nur die User, welche eine bestimmte Datei sperren.

Moin zusammen,
ich hol mal ein wenig aus. Wir setzen ein C/S-Kassenverfahren (IVR/Mach) ein, welches Daten von einem Server beim RZ auf einen lokalen Server bei uns überträgt. Diese Übertragung erfolgt alle drei Stunden zur vollen Stunde. Von diesem Server werden die Daten wiederum zeitgesteuert (5 Minuten nach der vollen Stunde) auf unseren Datenserver übertragen. Die Übertragung RZ - Server bei uns funktioniert immer. Die Übertragung Server bei uns - Datenserver nur manchmal (Grund siehe weiter unten). Grund der Übertragung ist der, daß in dem Verfahren Rechnungen erfaßt werden, die in einem anderen Verfahren gebucht werden. Dazu wird eine Excel-Tabelle erstellt, auf die mit einem Exel-Formular zugegriffen wird, um anhand der Rechnungsnummer schon die Grunddaten (Anschrift, Bankverbindung, etc.) zur Verfügung zu stellen. Hat nun ein Benutzer das Formular im Zugriff, während der "Update" der Excel-Tabelle läuft, findet keine Übertragung statt, da die Datei "in Benutzung" ist. Im Ergebnis können andere Benutzer nun nicht weiterarbeiten, da die neuen Datensätze noch nicht überspielt wurden und die Abfragen aufgrund der fehlenden Rechnungsnummer ins Leere laufen.
Früher konnte ich dann auf den Server gehen, dort die Geöffneten Dateien einsehen und die Benutzer trennen, die Überspeilung manuell durchführen und alle waren fröhlich. Heute funktioniert das nicht mehr (mangels Berechtigungen auf dem Server) und ich muß mich mit dieser Datei zufrieden geben. Die Datei hat mehrere 100 Zeilen und es ist relativ müßig, die mit der Hand am Arm durchzuforsten. Nun sucht isch eine weniger aufwändige Lösung, als die manuelle Suche.

Die Datei hat folgenden Aufbau:

01.
Files opened remotely on server1: 
02.
 
03.
[1342177289] E:\Daten\M2\FB1\Abt 1.1 
04.
    User:   M2MUELL 
05.
    Locks:  0 
06.
    Access: Read  
07.
[1677721620] E:\Daten\M2\FB3\Abt 3.1\M2STEMB\Vorlagen\Normal.dotm 
08.
    User:   M2STEMB 
09.
    Locks:  0 
10.
    Access: Read Write  
11.
[1744830489] E:\apps\scowi_5_11\exe\boost_regex-vc71-mt-gd-1_33.dll 
12.
    User:   M2GERLA 
13.
    Locks:  0 
14.
    Access:  
15.
.........
Nun war meine Überlegung, ich durchsuche diese Datei mit FIND nach dern Zeilen, in denen der Gesuchte Dateiname vorkommt.
01.
FINF /i /n "export\auswertung.xls" openfiles.txt
Dieser Befehl liefert als Ergebnis:
01.
 
02.
---------- OPENFILES.TXT 
03.
[107][-603979437] E:\Export\Auswertung.xls 
04.
[131][1879048659] E:\Export\Auswertung.xls 
05.
[323][805307363] E:\Export\Auswertung.xls
Als nächsten Schritt wollte ich mit der Zeilennummer als Skip-Argument einen FOR /F-Befehl ausführen lassen. Schöne Idee, leider so nicht nutzbar, da der skip-Parameter nur ein einstelliges Argument akzeptiert.

So, und schon fangen meine Probleme an:
Wie kann ich
- die eine Datei lesen,
- die Zeilennummer ermitteln,
- diese Zeilennummer "skipfähig" aufbereiten,
- damit in eine zweite Datei gehen,
- die zugehörige Folgezeile ermitteln
- den Usernamen aus der Folgezeile ermitteln
- das Ergebnis in eine weitere Datei schreiben
- und dann zurück zur ersten Datei
- dort die nächste Zeilennummer lesen
- und das Spiel von neuem beginnen.

und vor allem, alles mit puren Batch-Mitteln.

Mir würde ja schon reichen, wenn ich aufgrund der FIND-Abfrage aus der Datei die Zeile n und Zeile n+1 extrahieren könnte, damit ich den User angelistet bekomme.

Vielleicht sehe ich aber im Augenblick den Wald vor lauter Bäumen nicht und es gibt einen ganz anderen Weg. Würde mich über Hinweise diesbezüglich freuen.

Gruß J chem
Mitglied: bastla
13.05.2011 um 10:29 Uhr
Hallo Jochem!

Aufgrund der beschriebenen Struktur (jeweils nur ein User / Block, keine Zeile beginnt mit ":") etwa so:
01.
@echo off & setlocal 
02.
set "Ein=openfiles.txt" 
03.
set "Aus=Users.txt" 
04.
set "Gesucht=export\auswertung.xls" 
05.
set "Gesucht2=User:" 
06.
 
07.
del "%Aus%" 2>nul 
08.
set "Ausgabe=" 
09.
for /f "tokens=1* delims=:" %%i in ('findstr /i /n "^" "%Ein%"') do call :ProcessLine "%%j" 
10.
goto :eof 
11.
 
12.
:ProcessLine 
13.
echo %1|find /i "%Gesucht%">nul && (set "Ausgabe=%~1" & goto :eof) 
14.
if not defined Ausgabe goto :eof 
15.
echo %1|find /i "%Gesucht2%">nul && ( 
16.
    for /f "tokens=1*" %%i in (%1) do echo %Ausgabe%	%%j 
17.
    set "Ausgabe=" 
18.
)>>"%Aus%" 
19.
goto :eof
In Zeile 16 befindet sich vor %%j ein <TAB> ...

[Nachtrag]Um aber auch Deine ursprüngliche Idee umzusetzen:
01.
@echo off & setlocal 
02.
set "Ein=openfiles.txt" 
03.
set "Aus=Users.txt" 
04.
set "Gesucht=export\auswertung.xls" 
05.
set "Gesucht2=User:" 
06.
 
07.
del "%Aus%" 2>nul 
08.
set "Ausgabe=" 
09.
for /f "tokens=1-2* delims=[]" %%i in ('find /i /n "%Gesucht%"^<"%Ein%"') do ( 
10.
    set "Ausgabe=" 
11.
    for /f "tokens=2" %%a in ('more +%%i "%Ein%"') do if not defined Ausgabe ( 
12.
        echo [%%j]%%k	%%a 
13.
        set Ausgabe=true 
14.
15.
)>>"%Aus%"
[/Nachtrag]

Grüße
bastla
Bitte warten ..
Mitglied: Jochem
13.05.2011 um 11:35 Uhr
Moin bastla,

fühl Dich geknutscht, gehätschelt, gesonstwas. Habs gerade mal so in eine Batch-Datei gehämmert und es läuft *freu*. jetzt werde ich mir das mal in aller Ruhe zu Gemüte führen und nachvollziehen, was Du so gebastelt hast und wo meine diesbezüglichen Lücken aufgetreten sind. Danke vielmals.

Gruß J chem
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Seltsames Verhalten bei Errorlevel abfrage in FOR DO Schleife (1)

Frage von Kalma73 zum Thema Batch & Shell ...

Datenbanken
gelöst Row Number bei einer Abfrage sinnvoll einsetzen (1)

Frage von Aximand zum Thema Datenbanken ...

Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Batch & Shell
Abfrage ob Datei von heute da ist (15)

Frage von pbelcl zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...