Top-Themen

Aktuelle Themen (A bis Z)

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 Variable füllen mit Daten aus zwei Datein?

Mitglied: TDS-Raico

TDS-Raico (Level 1) - Jetzt verbinden

19.03.2008, aktualisiert 15:20 Uhr, 4598 Aufrufe, 7 Kommentare

per batch Datei (cmd) aus zwei verschiedenen Dateien einen Wert herausfiltern und diesen in eine Variable übergeben

Hallo zusammen,

Hab mich jetzt zwei Tage durch dieses Forum gewühlt und viel neues erfahren, aber leider nicht das gefunden, was ich suche
Deshalb hoffe ich, das mir hier jemand helfen kann.

Ich habe zwei Dateien

Datei 1: abteilung.log
01.
Rechner	Abteilung 
02.
Albany_alt	Ausgemustert 
03.
Archhse1	Frei, warten auf neue Verwendung 
04.
Bayside	SAPEdiAdmin 
05.
Hurley	Ausgemustert 
06.
CSB1A3P	Ausgemustert 
07.
BTISAP01	Kundeneigene 
08.
Fulda	Frei, warten auf neue Verwendung 
09.
Chester-alt	Ausgemustert 
10.
SAPIR3	Ausgemustert 
11.
Dakota_alt	Ausgemustert 
12.
etc... etc...
Datei 2: onlycluster.log
01.
SYSTEM|CH-jrsvpb1|CH-jrsvpb1|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.2|CH Betrieb 
02.
SYSTEM|CH-jrsapb1|CH-jrsvpb1|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.2|CH R/3-Business 
03.
SYSTEM|CH-jrsbq01|CH-jrsvq01|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.2|CH R/3-Business 
04.
SYSTEM|CH-jrsvpb1|CH-jrsvpb1|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.2|CH R/3-Business 
05.
SYSTEM|CH-jrsvq01|CH-jrsvq01|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.2|CH R/3-Business 
06.
SYSTEM|CH-spp00n1|CH-spp00ci|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.3|CH R/3-Business 
07.
SYSTEM|CH-spp00sh|CH-spp00ci|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.3|CH R/3-Business 
08.
SYSTEM|CH-spt00n1|CH-spt00ci|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.3|CH R/3-Business 
09.
SYSTEM|CH-spt00n2|CH-spt00ci|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.3|CH R/3-Business 
10.
SYSTEM|ksapcl1|sapkp1|XXXXX|XXXXX|XXXXX|XXXXX|HP UX 11.11|RSM (SAP EDI Admin) 
11.
SYSTEM|ksapcl2|sapkp1|XXXXX|XXXXX|XXXXX|XXXXX|HP UX 11.11|RSM (SAP EDI Admin) 
12.
SYSTEM|de06ap36|de06ap37|XXXXX|XXXXX|XXXXX|XXXXX|HP-UX 11.23|SAP Administration 
13.
SYSTEM|de06ap36|de06ap39|XXXXX|XXXXX|XXXXX|XXXXX|HP-UX 11.23|SAP Administration 
14.
SYSTEM|de06ap38|de06ap37|XXXXX|XXXXX|XXXXX|XXXXX|HP-UX 11.23|SAP Administration 
15.
SYSTEM|de06ap38|de06ap39|XXXXX|XXXXX|XXXXX|XXXXX|HP-UX 11.23|SAP Administration 
16.
SYSTEM|CSB2D1P|CSB6C1P|XXXXX|XXXXX|XXXXX|XXXXX|HP-UX B.11.0|Ausgemustert 
17.
SYSTEM|CSB2D2P|CSB6C1P|XXXXX|XXXXX|XXXXX|XXXXX|HP-UX B.11.0|Ausgemustert 
18.
SYSTEM|gwg-db1|gwg-sap|XXXXX|XXXXX|XXXXX|XXXXX|Linux RedHat ES 4.0|RSM (SAP EDI Admin) 
19.
SYSTEM|gwg-db1|gwg-db|XXXXX|XXXXX|XXXXX|XXXXX|Linux RedHat ES 4.0|RSM (SAP EDI Admin) 
20.
SYSTEM|gwg-db2|gwg-sap|XXXXX|XXXXX|XXXXX|XXXXX|Linux RedHat ES 4.0|RSM (SAP EDI Admin) 
21.
SYSTEM|gwg-db2|gwg-db|XXXXX|XXXXX|XXXXX|XXXXX|Linux RedHat ES 4.0|RSM (SAP EDI Admin) 
22.
SYSTEM|ost-db1|ost-db|XXXXX|XXXXX|XXXXX|XXXXX|Linux RedHat ES 4.0|RSM (SAP EDI Admin) 
23.
etc... etc...
Beide Dateien sind nicht gerade klein ;)

ok...
Unter Unix löse ich das Problem wie folgt...
01.
CLIENT=`echo $1` 
02.
LOG=/nsr/logs/$CLIENT 
03.
ABTLOG="/madras/logs/abteilung.log" 
04.
CLUSTERLOG="/madras/logs/onlycluster.log" 
05.
ABT="UNBEKANNT" 
06.
 
07.
grep -iw $CLIENT $ABTLOG >/dev/null 
08.
if  
09.
        [ $? = 0 ] 
10.
then 
11.
	ABT=`grep -iw $CLIENT $ABTLOG | grep -vi "\-alt" | grep -vi "\-neu" | cut -f2 | sort -u` 
12.
else 
13.
	grep -iw $CLIENT $CLUSTERLOG >/dev/null 
14.
	if 
15.
		[ $? = 0 ] 
16.
	then 
17.
		ABT=`grep -wi $CLIENT $CLUSTERLOG | grep -vi "\-alt" | grep -vi "\-neu" | cut -d"|" -f9 | sort -u | tail -1`  
18.
	fi 
19.
fi 
20.
echo "Abteilung: $ABT" >> $LOG
Damit hab ich auf alle Fälle herausgefunden, welcher Client/Rechner zu welcher Abteilung gehört... und sollte er in keiner dieser beiden Dateien vorkommen... ist als Abteilung ja zumindest "unbekannT" vorgegeben...


In cmd hab ich jetzt findstr als "pendant" zum grep unter Unix gefunden... aber leider komm ich nicht viel weiter als:

01.
@echo off 
02.
set SUCHBEGRIFF=%1 
03.
@findstr -I %SUCHBEGRIFF% c:\temp\abteilung.log
ok... damit wird zumindest schonmal die Zeile ausgegeben, in der sich der gesuchte String befindet...
Aber wie filter ich jetzt zumindest im Fall von abteilung.log genau diesen String heraus, sodass nur noch die Abteilung übrig bleibt und ich diese auch einer Variablen zuweisen kann?


Ich hoffe das war jetzt nicht zu umständlich gefragt? ;)


[Edit Biber] <code>-Tags eingestreut. [/Edit]
Mitglied: 61319
19.03.2008 um 09:28 Uhr
Hallo,

ich weiszwar nicht genau, wie die Lösung wäre, aber Du kannst auch mit dem for-befehl arbeiten.
Der kann dann auch gewisse Teile (token) einer Zeile zurück geben.

Gruß Niko
Bitte warten ..
Mitglied: bastla
19.03.2008 um 10:39 Uhr
Hallo TDS-Raico und willkommen im Forum!

Wie schon von NKNKNK angemerkt, kannst Du mittels "for" eine Textdatei zeilenweise lesen und die gelesenen Zeilen anhand von "delims" zerlegen - für die "abteilung.log" sähe das so aus:
01.
@echo off & setlocal 
02.
set "CLIENT=%~1" 
03.
set "LOG=\\nsr\logs\%CLIENT%" 
04.
set "ABTLOG=\\madras\logs\abteilung.log" 
05.
 
06.
REM set "SUCHBEGRIFF=%~1"  
07.
REM Suchbegriff sollte doch eigentlich %CLIENT% sein, oder? 
08.
 
09.
set "ABTEILUNG=unbekannt" 
10.
for /f "tokens=1*" %%i in ('findstr /I "%CLIENT%" "%ABTLOG%"') do "set ABTEILUNG=%%j" 
11.
echo %ABTEILUNG%>>%LOG%
Die Zerlegung erfolgt (ohne Angabe eines speziellen Delimiters) anhand von Leerzeichen oder Tabs. Als Ergebnis werden die einzelnen Teile ("tokens") in alphabetisch aufeinanderfolgende Variablen geschrieben - bei der Zerlegung oben steht demnach der Rechnername in %%i und alle danach noch folgenden Bestandteile der Zeile (ohne weitere Unterteilung wegen der Schreibweise 1*) in %%j.

Das "findstr" ließe sich noch verfeinern, indem Du den Schalter "/B" (Suchbegriff steht am Zeilenanfang) verwendest.

Grüße
bastla

P.S.: Dass Du zu den CMD-Befehlen jeweiils mit "/?" die Onlinehilfe aufrufen kannst, setze ich als bekannt voraus ...
Bitte warten ..
Mitglied: miniversum
19.03.2008 um 10:55 Uhr
Ja mit einem For sieht es dan so aus:
@echo off
set "SUCHBEGRIFF=%~1"
set "Datei=c:\temp\abteilung.log"
FOR /F "tokens=1,* delims= " %%i in ('findstr /I "%SUCHBEGRIFF%" "%Datei%"') do echo Rechner:%%i Abteilung:%%j

Wenn du das ganze mit onlycluster.log machen willst könnte dann die Forzeile so aussehen:
FOR /F "tokens=2,9 delims=^|" %%i in ('findstr /I "%SUCHBEGRIFF%" "%Datei%"') do echo Rechner:%%i Abteilung:%%j

Edit: ups zu langsam
Bitte warten ..
Mitglied: TDS-Raico
19.03.2008 um 12:48 Uhr
P.S.: Dass Du zu den CMD-Befehlen jeweiils
mit "/?" die Onlinehilfe aufrufen
kannst, setze ich als bekannt voraus ...


Danke ;)


Also das Script sieht jetzt folgendermaßen auss und funktioniert auch genauso, wie es derzeitig funktionieren soll:
01.
@echo off & setlocal 
02.
rem #### Variablen definieren 
03.
set "CLIENT=%~1" 
04.
set "LOG=c:\progra~1\nsr\logs\%CLIENT%.txt" 
05.
SET "DATUM=%date% %time%" 
06.
set "ABT=UNBEKANNT" 
07.
set "FIREWALL=unbekannt" 
08.
set "ABTLOG=c:\progra~1\nsr\ueberwachung\abteilung.log" 
09.
set "CLUSTERLOG=c:\progra~1\nsr\ueberwachung\onlycluster.log" 
10.
 
11.
rem #### Programstart 
12.
echo //logstart// >> %LOG% 
13.
echo Datum: %DATUM% MET >> %LOG% 
14.
 
15.
for /f "tokens=1* " %%i in ('findstr /I "%CLIENT%" "%ABTLOG%"') do set ABT=%%j 
16.
for /f "tokens=2,9 delims=^|" %%i in ('findstr /I "%CLIENT%" "%CLUSTERLOG%"') do set ABT=%%j 
17.
 
18.
echo Abteilung: %ABT% >> %LOG% 
19.
echo Client Netzwerkkartenseinstellung: %FIREWALL% >> %LOG% 
20.
nsrlog -f %LOG% 
21.
echo //logende// >> %LOG% 
22.
 
Vielen Dank also für eure Tipps und Tricks
Bitte warten ..
Mitglied: miniversum
19.03.2008 um 13:43 Uhr
Ähm..
Wenn du das so machst kannst du auch die Zeile
for /f "tokens=1* " %%i in ('findstr /I "%CLIENT%" "%ABTLOG%"') do set ABT=%%j
Weglassen weil die Variable %ABT% gleich in der nächsten Zeile überschrieben werden würde.
Willst du beide dateien durchsuchen ob in einer davon das ergebnis enthalten ist?
Bitte warten ..
Mitglied: TDS-Raico
19.03.2008 um 14:35 Uhr
Ähm..
Wenn du das so machst kannst du auch die
Zeile
> for /f "tokens=1* " %%i in
('findstr /I "%CLIENT%"
"%ABTLOG%"') do set ABT=%%j
Weglassen weil die Variable %ABT% gleich in
der nächsten Zeile überschrieben
werden würde.
Willst du beide dateien durchsuchen ob in
einer davon das ergebnis enthalten ist?

Ja, es müssen beide Dateien durchsucht werden.
Denn normalerweise ist ein "Client" der NICHT in der abteilung.log zu finden ist, dann in der "onlycluster.log" zu finden...
Ist er in beiden Dateien NICHT zu finden... ist der "Kunde" selbstverantwortlich... die Fachabteilung in unserem Haus also nicht zuständig und somit "unbekannt"

Hab das mehrmals getestet und bis jetzt siehts gut aus.
Wir lassen das jetzt vorläufig erstmal bei einem unserer externen Kunden so bis nach Ostern laufen (Script wird jedesmal nach beenden einer Datensicherung aufgerufen) und wenn keine weiteren Problemchen auftauchen...
...wirds bei allen externen Kunden die unbedingt n Windowssystem als Backupserver einsetzen, aktiv geschaltet.

Glaub mir... ich würd lieber Unixsysteme einsetzen und mit Shellscripten arbeiten ;) Das kann ich wenisgtens ne Ecke besser als Bash Dateien unter Dos... Obwohl ich mit Dos und Windows 3.1 damals angefangen hab ;)
Bitte warten ..
Mitglied: miniversum
19.03.2008 um 15:20 Uhr
Naja stimt bei For geht das ja hintereinander. War grade ein Denkfehler von mir.

Hihi. seit win 3.1 hat sich das aber auch gut weiterentwickelt.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

In hta-Datei ein Textfeld mit einer Variable füllen?

gelöst Frage von AlbertMinrichBatch & Shell3 Kommentare

Hallo, ich fülle beim Start einer hta-Datei eine Variable (myvari) mit einem Wert. Diese Variable will ich an ein ...

Microsoft Office

Word Formularfelder füllen mit Daten aus Excel

gelöst Frage von bluepythonMicrosoft Office15 Kommentare

Hallo, in einer Wordvorlage sollen bestimmte Felder wie Name, Vorname, Durchwahl, etc. automatisch gefüllt werden. Die benötigten Daten stehen ...

Batch & Shell

Auswahl zweier Variablen zu einer zusammenführen

Frage von complexBatch & Shell5 Kommentare

Moin miteinander, und wieder eine Frage bezüglich Powershell: Ich habe das Problem, dass ich gerade an einem script arbeite, ...

Batch & Shell

Wie kann ich zwei Variablen ineinander verschachteln?

gelöst Frage von red-eyeBatch & Shell9 Kommentare

Hallo allerseits! Könntet Ihr mir wieder einmal einen Tipp für die Batch-Programmierung geben? Vielen Dank für frühere wunderbare Tipps! ...

Neue Wissensbeiträge
Multimedia & Zubehör
AVM Fritz USB WLAN Sticks schneller einschalten
Tipp von NetzwerkDude vor 10 StundenMultimedia & Zubehör

Die AVM Fritz WLAN Sticks haben in der Firmware 2 Modis: Einmal als Massenspeicher und einmal als WLAN Netzwerkkarte ...

Windows Server

Windows Server Backup schlögt Fehl -Lösung 2008-2016

Tipp von BiGnoob vor 12 StundenWindows Server

Hi zusammen , ich möchte gerne einen Lösungstipp abgeben für folgenden fehler: lösung ist folgende:

Humor (lol)
Telekom vs. O2 - 3:2
Erfahrungsbericht von the-buccaneer vor 1 TagHumor (lol)3 Kommentare

Unglaublich aber wahr: Nachdem mein privater Anschluss am 19.04.18 auf VOIP und VDSL umgestellt wurde, hatte ich seitdem 1,5 ...

Batch & Shell

Windows 10 Heimnetzgruppe abgeschaft. Ein Script für einfache Netzwerk - Freigabe im Heimnetzwerk

Anleitung von treehe vor 1 TagBatch & Shell3 Kommentare

Anleitung für eine einfache Netzwerkfreigabe unter Windows 10 Wie weiter hab mal ein kleines CMD - Script gebastelt. Womit ...

Heiß diskutierte Inhalte
Netzwerke
IP-Adresse am zweiten Domänencontroller fest vergeben - Server verschwunden
gelöst Frage von DanielG1974Netzwerke25 Kommentare

Ich hab ein Problem, was ich bisher noch nicht erlebt habe Ich habe erfolgreich einen zweiten Server mit ActiveDirectory ...

Windows Tools
Virtueller Drucker gesucht (Schnittstelle: USB oder Seriell)
Frage von chrisButterflyWindows Tools19 Kommentare

Hi, ich suche einen virtuellen Drucker, den ich über eine USB oder serieller Schnittstelle ansprechen kann. Dieser Drucker soll ...

Windows Server
Windows Server 2012 - Update - Beim Booten bleibt der Server beim Windows Zeichen stehen
Frage von KeilbachWindows Server15 Kommentare

Hallo Zusammen, ich grüße euch, mein Name ist Michele. Ich bin hier ganz Neu - da ich einfach nicht ...

Firewall
Sophos SG 125 nicht mehr erreichbar
Frage von GwaihirFirewall14 Kommentare

Hallo zusammen, ausgerechnet über die Feiertage stimmt etwas mit meiner Firmen-Firewall nicht. Es ist eine Sophos SG 125 und ...