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

Find, findstr, tokens, delims .. Erläuterungen

Frage Entwicklung Batch & Shell

Mitglied: .Sessl

.Sessl (Level 1) - Jetzt verbinden

14.04.2011 um 14:44 Uhr, 5805 Aufrufe, 15 Kommentare

Hallo zusammen,

dadurch dass einige Softwareanbieter ihre Software nicht richtig programmieren, ist man gezwungen hinten herum selber aufzuräumen.
Evtl. kennt sich jmd. mit Symantecs Backup Exec aus, dann kann er dies evtl. nachvollziehen, andernfalls ist das auch nicht weiter schlimm.

Ich habe mir ein kleines Script geschrieben, welches die Auswahllisten vom Backup Exec wieder löscht.
Hat ein wenig gedauert, da die Command Line Application nicht richtig mit gespielt hat.

Ich hatte erst:

01.
set exp=exp.txt 
02.
set exp1=exp1.txt 
03.
set log=log.txt 
04.
 
05.
REM bemcmd -o251 > %exp% 
06.
REM for /F "tokens=2 delims={}" %%i in (%exp%) do (echo %%i>>%exp1%)
Mit dem Befehl bemcmd -o251 lasse ich mir alle Auswahlisten ausgeben und bekomme folgendes

01.
SCRIPT ID: {0769FFB7-2065-420E-BBB6-0004C1B01D96} 
02.
SCRIPT NAME: Wechsler inventarisieren 00528 
03.
 
04.
SCRIPT ID: {878DED57-60E6-4456-B7B6-00341A9079A1} 
05.
SCRIPT NAME: Wechsler inventarisieren 00240 
06.
 
07.
SCRIPT ID: {1F436E0D-6E1D-4F2C-AFD0-0036FDA9C085} 
08.
SCRIPT NAME: Wiederherstellen 00060 
09.
 
10.
SCRIPT ID: {384C2A3C-A913-4FF3-93C5-0040C641E3ED} 
11.
SCRIPT NAME: Wechsler inventarisieren 00072
Mit dem kurzen Codeschnipsel oben hätte ich eine schöne Auflistung á la

01.
0769FFB7-2065-420E-BBB6-0004C1B01D96 
02.
878DED57-60E6-4456-B7B6-00341A9079A1 
03.
1F436E0D-6E1D-4F2C-AFD0-0036FDA9C085 
04.
384C2A3C-A913-4FF3-93C5-0040C641E3ED
bekommen, doch das Löschen, obwohl es laut Guide beschrieben ist, hat mittes GUID nicht funktioniert.
Also doch den Listennamen auslesen:

01.
@echo off & setlocal 
02.
 
03.
 
04.
set exp=exp.txt 
05.
set exp1=exp1.txt 
06.
set exp2=exp2.txt 
07.
set log=log.txt 
08.
 
09.
bemcmd -o251 > %exp% 
10.
if exist %exp1% del %exp1% 
11.
if exist %exp2% del %exp2% 
12.
 
13.
for /F "tokens=3 delims=:" %%i in ('findstr /n /C:"SCRIPT NAME:" %exp%') do (echo %%i>>%exp1%) 
14.
type %exp1% | find /v "Meine" >> %exp2% 
15.
for /F "tokens=1 delims=" %%i in (%exp2%) do (bemcmd -o221 -s"%%i")
Ihr werdet sicher einen anderen, evtl. sogar schnelleren Weg finden, doch ich bin froh das es erstmal funktioniert (nach mehreren Stunden 'basteln')!
Mein erstes Problem war, da man bei delims keine 'Wörter' verwenden kann, habe ich mich für findstr entschieden, das Problem, dass die abgeschnittenen Zeilen mit einer Leerzeile vorangestellt gespeichert werden:
01.
 Wechsler inventarisieren 00528 
02.
 Wechsler inventarisieren 00240 
03.
 Wiederherstellen 00060 
04.
 Wechsler inventarisieren 00072
Hier habe ich leider keinen Weg gefunden diese direkt in der Schleife mit zu entfernen.

Nächstes Problem, ich wollte in der selben Zeile hinter do und vor dem echo eine IF Abfrage nach einem Wert machen, welcher nicht in die %exp1% Variable soll. Hat aber nicht funktioniert.
Ist das überhaupt möglich? Ich habe mich dann für find /v entschieden, doch hier muss ich eine 2. txt-Datei anlegen lassen, da ich in die vorhandene nicht schreiben darf. Warum?

Kontext: in einer Zeile steht Meine, diese Zeile darf nicht übergeben werden, bzw. muss gelöscht werden. (Zeile 14)

Danach (Zeile 15) lese ich jede Zeile aus und lösche quasi mit dem Befehl bemcmd -o221 -s"Wechsler inventarisieren 00072" die Auswahlisten.
Der Befehl besteht darauf die Variable in Anführungszeichen zu setzen, ist dies der richtige Weg, oder gibt es einen anderen?


Für ein paar erleuchtende Hinweise wäre ich sehr dankbar!


ps. falls es euch keinen Mehraufwand macht ich hatte versucht die Zeilen, welche ignoriert bzw. gelöscht werden sollen,
in eine extra Datei einzutragen, in die man dann einfach Zeilen weise Einträge hinzufügen kann, damit auch andere Personen Auswahllisten eintragen können, welche eben nicht gelöscht werden sollen.

Versucht hatte ich das mit einer Schleife in einer Schleife, welche die Zeilen aus der Ignore.txt ausliest und danach Zeilenweise die exp1.txt überprüft ob eben diese Einträge vorhanden sind und sie gegebenenfalls löscht, doch auch hier scheiterte ich, leider.


Danke und Gruß
Tobias
Mitglied: bastla
14.04.2011 um 14:59 Uhr
Hallo .Seesl!

Mal überschlagsmäßig eingedampft (und ungetestet) etwa so:
01.
@echo off & setlocal 
02.
set exp=exp.txt 
03.
set "ausw=auswahlliste.txt" 
04.
set log=log.txt 
05.
 
06.
for /f "tokens=2* delims= " %%i in ('bemcmd -o251^|findstr /C:"SCRIPT NAME:" %exp%^|findstr /v /g:"%ausw%"') do echo bemcmd -o221 -s"%%j" 
07.
pause
Zum stressfreien Testen steht vor dem Löschbefehl noch ein "echo" ...

Grüße
bastla

[Edit] Fehlendes Prozentzeichen ergänzt und Schleife angepasst (siehe jeweils etwas weiter unten) [/Edit]
Bitte warten ..
Mitglied: .Sessl
14.04.2011 um 15:28 Uhr
Hallo bastla,

danke für die schnelle Antwort, jedoch läuft das Script nicht durch, sonder bricht irgendwo ab. (noch so eine Sache, wie erkenne ich wo das Script ne 'macke' hat?)
Kann das sein?
Bitte warten ..
Mitglied: bastla
14.04.2011 um 15:35 Uhr
Hallo .Sessl!

Vorzugsweise solltest Du einen Batch zum Testen mit "echo on" anstatt "echo off" verwenden und direkt aus der CMD-Shell starten ...

Die "auswahlliste.txt" sollte übrigens zumindest das Wort "Meine" enthalten (weitere Suchwörter dann jeweils in eine neue Zeile schreiben) und natürlich auch gefunden werden (daher ggf eine vollständige Pfadangabe verwenden).

Um übrigens ein ev störendes Leerzeichen am Beginn des ausgelesenen Namens zu vermeiden, könntest Du die "for"-Schleife mit
for /F "tokens=2* delims= "
beginnen.

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
14.04.2011 um 15:41 Uhr
Aloha bastla!

also "%ausw" ... w ... w ... wird wohl nichts werden ;) da bin ich zu 100 Prozent sicher

greetz André

edit: gern geschehen, kann ja mal vorkommen beim Tippen ^_^
@.Sessl - wie du sicher mitbekommen hast, hat da etwas hochprozentiges gefehlt - nein kein Schnaps, sondern ein %-Zeichen ;)

edit² @bastla ... ungetestet schützt vor Tippfehlern nicht :P
Bitte warten ..
Mitglied: bastla
14.04.2011 um 15:44 Uhr
Hallo Skyemugen!
... na dann - ich bin ja leicht zu überzeugen ...

Danke
bastla

[Edit] ... daher ja auch der Standard-Disclaimer "ungetestet" ... [/Edit]

[Edit 2]
ungetestet schützt vor Tippfehlern nicht :P
... möge aber eine leicht sensibilisierende Wirkung haben ...
[/Edit 2]
Bitte warten ..
Mitglied: .Sessl
14.04.2011 um 15:59 Uhr
Hallo Ihr zwei,

okay, das Script läuft nun erstmal ohne murren.
Könnte mir evtl. nur nochmal kurz jemand die einzelnen Schritte erläutern, klar ist was eine Pipe macht und für was /C: und /G: stehen.
Das Tokens=2* hatte ich schon mal gesehen, doch wenn ich das einsetzen möchte macht es nie was es soll (ab Token 2 alles dahinter zu Token 2 zählen)

Eine Sache noch, da nun alles direkt über eine Zeile läuft, werden dementsprechend auch die Umlaute fehlerhaft ausgegeben:

01.
bemcmd -o221 -s"Ausschl³sse" 
02.
bemcmd -o221 -s"Wechsler l÷schen 00008" 
03.
bemcmd -o221 -s"Wechsler l÷schen 00006" 
04.
bemcmd -o221 -s"Wechsler l÷schen 00016" 
05.
bemcmd -o221 -s"Wechsler l÷schen 00010" 
06.
bemcmd -o221 -s"Wechsler l÷schen 00011" 
07.
bemcmd -o221 -s"Wechsler l÷schen 00004" 
08.
bemcmd -o221 -s"Wechsler l÷schen 00001" 
09.
bemcmd -o221 -s"Wechsler l÷schen 00014" 
10.
bemcmd -o221 -s"Wechsler l÷schen 00007" 
11.
bemcmd -o221 -s"Wechsler l÷schen 00013" 
12.
bemcmd -o221 -s"Wechsler l÷schen 00019" 
13.
bemcmd -o221 -s"Wechsler l÷schen 00009" 
14.
bemcmd -o221 -s"Wechsler l÷schen 00005" 
15.
bemcmd -o221 -s"Wechsler l÷schen 00015" 
16.
bemcmd -o221 -s"Wechsler l÷schen 00012" 
17.
bemcmd -o221 -s"Wechsler l÷schen 00002" 
18.
bemcmd -o221 -s"Wechsler l÷schen 00017" 
19.
bemcmd -o221 -s"Wechsler l÷schen 00003" 
20.
bemcmd -o221 -s"Wechsler l÷schen 00018"
Evtl. doch über eine zweite Datei gehen?


Danke und Gruß
Tobias
Bitte warten ..
Mitglied: bastla
14.04.2011 um 16:04 Uhr
Hallo .Sessl!
Evtl. doch über eine zweite Datei gehen?
... oder
chcp 1252>nul
an den Anfang stellen.
Das Tokens=2* hatte ich schon mal gesehen, doch wenn ich das einsetzen möchte macht es nie was es soll (ab Token 2 alles dahinter zu Token 2 zählen)
... alles dahinter zu Token 3 zählen - daher bei Schleifenvariable "%%i" für den gesuchten Teil "%%j" verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: .Sessl
14.04.2011 um 16:20 Uhr
Hi bastla,

ich wüsste jetzt nicht genau was ich noch falsch machen könnte:

01.
@echo off & setlocal 
02.
 
03.
chcp 1252>nul 
04.
 
05.
set exp=exp.txt 
06.
set "ausw=auswahlliste.txt" 
07.
set log=log.txt 
08.
 
09.
for /f "tokens=2* delims= " %%i in ('bemcmd -o251^|findstr /C:"SCRIPT NAME:" %exp%^|findstr /v /g:"%ausw%"') do echo bemcmd -o221 -s"%%j" 
10.
pause
Aber die Ausgabe bleibt die gleiche ..

Wenn ich nun für die Schleifenvariable %%c verwenden würde, müsste ich %%d als Ausgabevariable nutzen?


Danke.
Gruß Tobias
Bitte warten ..
Mitglied: bastla
14.04.2011 um 16:28 Uhr
Hallo .Sessl!
Aber die Ausgabe bleibt die gleiche ..
Sollte sie bei Verwendung der Codepage 1252 nicht ...
Du kannst aber natürlich testweise den Umweg über eine Datei nehmen - allerdings sollte es auch dann nicht ohne Umschalten der Codepage funktionieren.
Wenn ich nun für die Schleifenvariable %%c verwenden würde, müsste ich %%d als Ausgabevariable nutzen?
Ja - die einzelnen "token" stehen immer in den alphabetisch aufeinander folgenden Variablen ...

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
14.04.2011 um 17:17 Uhr
Aloha,
[OT]
nur nebenbei bemerkt: das mit den codepages hat bei mir bei noch keiner Windows-Version funktioniert, für mich sind das Mythen *grins*
[/OT]
greetz André
Bitte warten ..
Mitglied: .Sessl
14.04.2011 um 17:29 Uhr
Müsste man evtl. am Windows (Umgebungsvariable?) etwas einstellen, damit das klappt?

Bei anderen Scripten nutze ich folgendes, habe ich auch aus nem Forum, fand ich echt clever:
01.
chcp 1252>nul 
02.
set ue=ü 
03.
set ae=ä 
04.
set oe=ö 
05.
set Uue=Ü 
06.
set Aae=Ä 
07.
set Ooe=Ö 
08.
set ss=ß 
09.
chcp 850>nul
Bitte warten ..
Mitglied: rubberman
15.04.2011 um 00:33 Uhr
Hallo .Sessl,

wie du an diesem Script Snippet siehst, reicht die Änderung der Codepage nach ANSI nicht aus. Du musst für die korrekte Ausgabe wieder zurück nach ASCII wechseln.
Beispiel für FOR Schleife:
01.
@echo off &setlocal 
02.
chcp 1252>nul 
03.
for %%a in (Ä Ü Ö ä ö ü ß) do ( 
04.
  chcp 850>nul 
05.
  echo %%a 
06.
07.
pause
oder
01.
@echo off &setlocal 
02.
chcp 1252>nul 
03.
for /f "tokens=*" %%a in ('echo Ä Ü Ö ä ö ü ß^&chcp 850^>nul') do echo %%a 
04.
pause
Stellt sich aber noch die Frage, ob das für die tatsächliche Ausführung von bemcmd (also ohne echo) überhaupt nötig ist. Ich denke nicht.

Grüße
rubberman
Bitte warten ..
Mitglied: .Sessl
15.04.2011 um 10:42 Uhr
Moin,

hast recht, das Script juckt's ohne ECHO nicht, danke.
Eine Frage noch, in eine FOR Anweisung, wieviele Pipes kann man bzw. darf man setzen und ist es ein muss dieses ^ (Dach) vor die Pipe zu setzen? ^|


Danke.
Bitte warten ..
Mitglied: bastla
15.04.2011 um 11:57 Uhr
Hallo .Sessl!
wieviele Pipes kann man bzw. darf man setzen
Das weiß ich auch nicht - ich bin schon auf das Ergebnis Deiner diesbezüglichen Tests gespannt (allerdings kannst Du ja Suchbegriffe in Dateien zusammenfassen und bräuchtest dann eigentlich nur ein "/g:" und ein "/v /g:") ...
und ist es ein muss dieses ^ (Dach) vor die Pipe zu setzen? ^|
Ja (das sollten Deine Tests eigentlich schon gezeigt haben).

Grüße
bastla
Bitte warten ..
Mitglied: .Sessl
15.04.2011 um 12:17 Uhr
Ich danke Euch für die rasche Hilfe und das ich wieder etwas dazu gelernt habe, danke!

Schönes Wochenende und ein frohes Fest!

Gruß
Tobias
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Batch & Shell
gelöst Findstr - code für schwieriger Abfrage gesucht (9)

Frage von reissaus73 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mal eine neue Art von Abfrage mit findstr (8)

Frage von DaTobsn zum Thema Batch & Shell ...

Batch & Shell
gelöst Nonsense Error - find ihn nicht. (Batch) (7)

Frage von clragon zum Thema Batch & Shell ...

Debian
Find: sys kernel debug Permission denied

Frage von vikozo zum Thema Debian ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

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

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

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...