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

Batch Suchmaschine, Zeichen die hinter dem gesuchtem Wert stehen übermitteln

Frage Entwicklung Batch & Shell

Mitglied: carp-catcher

carp-catcher (Level 1) - Jetzt verbinden

21.07.2011 um 15:25 Uhr, 4976 Aufrufe, 11 Kommentare

Suchmaschine, Wert übermitteln der rechts neben dem gesuchtem steht.

hallo zusm,

ich habe mir mit meinen noch kleinen Batch Kenntnissen mal eine Suchmaschine zusm kopiert :P
funktioniert soweit auch.
Diese Batch sucht in einer txt nach einem Wort was man eingibt.
Ich möchte das der text der rechts neben dem gesuchtem Wort steht über echo ganz normal angezeigt wird.

z.B. das steht in der txt :

Name Nachname
Straße Hausnummer

wenn ich dann nach Name suche soll Nachname über echo angezeigt werden.
Wenn das gesuchte mehrmals gefunden worden ist soll alles was je rechts daneben steht angezeigt werden.

Das ist das Batch Skript:

@echo off
echo Was suchen sie ?
set /p "s=Bitte eingeben: "
@for /f "Tokens=3,*" %%a in ('find /I /C "%s%" c:\Liste.txt^') do @set T=%%a

@If "%T%" LSS "1" goto Exit

@goTo JA

:Exit
@Echo.
@Echo %s% wurde nicht gefunden
@Echo.
@Pause
exit

:JA
@echo.
@echo Der %s% wurde %T% mal gefunden
@echo.
@echo juhuuu,der Test geht
@echo.
@Pause

Geht doch bestimmt irgendwie
Wenn jemand eine mögliche Lösung weiß, bitte posten
Ach und könnt ihr dann erklären was ihr da gemacht habt, ich versuche nämlich gerade Batch zu lernen.

Danke euch !

greez
Mitglied: Friemler
21.07.2011 um 17:13 Uhr
Hallo carp-catcher,

tjaaaaa, also diese Aufgabe per Batchscript lösen ist murks. Ich hätte da was in VBScript:
01.
Const ForReading = 1 
02.
 
03.
If WScript.Arguments.Count > 1 Then 
04.
  Set objFSO = CreateObject("Scripting.FileSystemObject") 
05.
  strContent = objFSO.OpenTextFile(WScript.Arguments(0), ForReading, False).ReadAll 
06.
 
07.
  Set objRegExp        = New RegExp 
08.
  objRegExp.Global     = True 
09.
  objRegExp.IgnoreCase = False 
10.
  objRegExp.Pattern    = "(\b" & WScript.Arguments(1) & "\b)\s(\b[^\s]*\b)" 
11.
 
12.
  For Each objMatch In objRegExp.Execute(strContent) 
13.
    WScript.Echo objMatch.SubMatches(1) 
14.
  Next 
15.
End If
Das Script z.B. als Search.vbs speichern. Aufruf:
cscript /nologo Search.vbs "DateiInDerGesuchtWerdenSoll" "Begriff"
Grob zum Algorithmus:
  1. In Zeile 5 wird der Inhalt der Datei, deren Name und Pfad im ersten Parameter (Zugriff über WScript.Arguments(0)) übergeben wurde, komplett in eine Stringvariable eingelesen.
  2. Danach wird ein Objekt für Reguläre Ausdrücke erzeugt.
  3. Durch das Setzen der Global-Eigenschaft auf True wird eingestellt, dass alle Stellen gefunden werden sollen, an denen der gesuchte reguläre Ausdruck auftritt, nicht nur die erste Stelle.
  4. Mit der IgnoreCase-Eigenschaft wird das Ignorieren von Groß-/Kleinschreibung gesteuert, hier soll sie also nicht ignoriert werden.
  5. Die Eigenschaft Pattern beschreibt das Suchmuster.
    • In Klammern gesetzte Ausdrücke ergeben im Ergebnis sog. Submatches
    • \b bedeutet Wortgrenze
    • Dann kommt der als zweiter Parameter übergebene Begriff (WScript.Arguments(1))
    • Danach wieder eine Wortgrenze (\b)
    • Die schließende Klammer, um den ersten Submatch abzuschließen
    • Dann ein Freizeichen (Space oder Tab), \s
    • Öffnende Klammer, Beginn eines neuen Submatches
    • Eine Wortgrenze, \b
    • Eine Klasse von Zeichen, die alles außer Freizeichen enthält [^\s]
    • Ein Zeichen aus dieser Zeichenklasse beliebig oft, *
    • Eine Wortgrenze, \b
    • Die schließende Klammer, um den zweiten Submatch abzuschließen
  6. Die For-Schleife in Zeile 12 iteriert durch alle vom Aufruf der Methode Execute gefundenen Treffer. Jeder Treffer/Match enthält immer zwei Submatches. Der erste Submatch mit dem Index 0 enthält den gesuchten Begriff und interessiert nicht, deshalb wird nur der zweite Submatch mit dem Index 1 in Zeile 13 ausgegeben.

Die Anzahl der Fundstellen erhält man mit
01.
Set colMatches = objRegExp.Execute(strContent) 
02.
 
03.
WScript.Echo colMatches.Count & " Fundstellen." 
04.
 
05.
For Each objMatch In colMatches 
06.
  WScript.Echo objMatch.SubMatches(1) 
07.
Next
Wenn Du jetzt stöhnst , tut mir leid, für sowas nehme ich kein Batchscript, viel zu umständlich. Es ist auf jeden Fall sinnvoll, VBScript zu lernen, gerade wenn es um das verarbeiten von Dateiinhalten geht, da hat Batchscript große Schwächen.

Hier gibt es eine Sprachreferenz zu VBScript in deutsch, der Link ist das script56.chm unter der fetten Überschrift Microsoft Windows Script-Technologien - Hilfe.

Gruß
Friemler
Bitte warten ..
Mitglied: carp-catcher
21.07.2011 um 18:12 Uhr
hallo Friemler,
erstmal danke für deine Mühe.
Ja das es sinnvoll ist vbs zu lernen verstehe ich :P
Aber ich wollte erstmal mit batch anfangen eins nach dem anderen

Jetzt verstehe ich aber folgendes nicht,
kann die vbs datei die daten einfach so an die batch datei übermitteln ? häää ... verwirrend :D

Und jetzt, mag zwar dumm klingen aber ich weiß jetzt nicht wo ich diese Zeile(cscript /nologo Search.vbs "DateiInDerGesuchtWerdenSoll" "Begriff") einsetzten soll im batch Skript und wies dann weitergeht.
Hab schon ein paar varianten durch aber es will noch nicht so recht ...

Vll könntest du mir da nochmal helfen ?

greez

/edit

und
Set colMatches = objRegExp.Execute(strContent)

WScript.Echo colMatches.Count & " Fundstellen."

For Each objMatch In colMatches
WScript.Echo objMatch.SubMatches(1)
Next

wo setz ich das rein ?

entschuldige meine Unwissenheit :P
Bitte warten ..
Mitglied: Friemler
21.07.2011 um 18:41 Uhr
Zitat von carp-catcher:
kann die vbs datei die daten einfach so an die batch datei übermitteln?
...
ich weiß jetzt nicht wo ich diese Zeile einsetzten soll

Am besten als Inline-VBScript:
01.
@echo off & setlocal 
02.
 
03.
set "VBScript=%Temp%\Search.vbs" 
04.
 
05.
> "%VBScript%" echo Const ForReading = 1 
06.
>>"%VBScript%" echo If WScript.Arguments.Count ^> 1 Then 
07.
>>"%VBScript%" echo   Set objFSO = CreateObject("Scripting.FileSystemObject") 
08.
>>"%VBScript%" echo   strContent = objFSO.OpenTextFile(WScript.Arguments(0), ForReading, False).ReadAll 
09.
>>"%VBScript%" echo   Set objRegExp        = New RegExp 
10.
>>"%VBScript%" echo   objRegExp.Global     = True 
11.
>>"%VBScript%" echo   objRegExp.IgnoreCase = False 
12.
>>"%VBScript%" echo   objRegExp.Pattern    = "(\b" ^& WScript.Arguments(1) ^& "\b)\s(\b[^\s]*\b)" 
13.
>>"%VBScript%" echo   Set colMatches = objRegExp.Execute(strContent) 
14.
>>"%VBScript%" echo   WScript.Echo colMatches.Count ^& " Fundstelle(n)" 
15.
>>"%VBScript%" echo   For Each objMatch In colMatches 
16.
>>"%VBScript%" echo     WScript.Echo objMatch.SubMatches(1) 
17.
>>"%VBScript%" echo   Next 
18.
>>"%VBScript%" echo End If 
19.
 
20.
::Das VBScript ausführen, Ausgaben erscheinen auf dem Schirm 
21.
cscript /nologo "%VBScript%" "text.txt" "Name" 
22.
 
23.
::Wenn Du die Anzahl der Fundstellen im Batchscript benötigst 
24.
for /f %%l in ('cscript /nologo "%VBScript%" "text.txt" "Name" ^| find "Fundstelle"') do set "nMatches=%%l" 
25.
echo %nMatches% 
26.
 
27.
del "%VBScript%"
Gruß
Friemler
Bitte warten ..
Mitglied: Friemler
21.07.2011 um 19:39 Uhr
Weitere Möglichkeit:
01.
@echo off & setlocal enabledelayedexpansion 
02.
 
03.
 
04.
set "VBScript=%Temp%\Search.vbs" 
05.
 
06.
> "%VBScript%" echo Const ForReading = 1 
07.
>>"%VBScript%" echo If WScript.Arguments.Count ^> 1 Then 
08.
>>"%VBScript%" echo   Set objFSO = CreateObject("Scripting.FileSystemObject") 
09.
>>"%VBScript%" echo   strContent = objFSO.OpenTextFile(WScript.Arguments(0), ForReading, False).ReadAll 
10.
>>"%VBScript%" echo   Set objRegExp        = New RegExp 
11.
>>"%VBScript%" echo   objRegExp.Global     = True 
12.
>>"%VBScript%" echo   objRegExp.IgnoreCase = False 
13.
>>"%VBScript%" echo   objRegExp.Pattern    = "(\b" ^& WScript.Arguments(1) ^& "\b)\s(\b[^\s]*\b)" 
14.
>>"%VBScript%" echo   Set colMatches = objRegExp.Execute(strContent) 
15.
>>"%VBScript%" echo   WScript.Echo colMatches.Count 
16.
>>"%VBScript%" echo   For Each objMatch In colMatches 
17.
>>"%VBScript%" echo     WScript.Echo objMatch.SubMatches(1) 
18.
>>"%VBScript%" echo   Next 
19.
>>"%VBScript%" echo End If 
20.
 
21.
 
22.
::VBScript ausführen und aus der Ausgabe die Anzahl Matches (Zeile 1) in Variable und 
23.
::die einzelnen Matches (alle anderen Zeilen) in Batch-Pseudoarray einlesen 
24.
for /f "tokens=1* delims=:" %%a in ('cscript /nologo "%VBScript%" "text.txt" "Name" ^| findstr /n "^"') do ( 
25.
  if "%%a" equ "1" ( 
26.
    set "nMatches=%%b" 
27.
  ) else ( 
28.
    set "Matches=!Matches!;"%%b"" 
29.
30.
31.
 
32.
del "%VBScript%" 
33.
 
34.
 
35.
::Alle Matches ausgeben 
36.
echo %nMatches% Fundstelle(n) 
37.
 
38.
set /a Cntr=0 
39.
 
40.
for %%m in (%Matches%) do ( 
41.
  set /a Cntr+=1 
42.
  echo !Cntr!. Fund: %%~m 
43.
44.
 
45.
echo. 
46.
 
47.
::Einen bestimmten Match ausgeben, hier den dritten 
48.
set "n=3" 
49.
 
50.
echo %n%. Fund: 
51.
for /f "tokens=%n% delims=;" %%m in ("%Matches%") do echo %%~m
Hier muss die verzögerte Variablenerweiterung benutzt werden.

Gruß
Friemler
Bitte warten ..
Mitglied: carp-catcher
21.07.2011 um 19:57 Uhr
puh ist das ne harte Nuss, liegt aber vermutlich an mir :D

funktioniert schon aber irgendwie findet der nix obwohl ich das richte drin stehen habe:

.bat:
@echo off & setlocal
set "VBScript=%Temp%\Search.vbs"
> "%VBScript%" echo Const ForReading = 1
>>"%VBScript%" echo If WScript.Arguments.Count ^> 1 Then
>>"%VBScript%" echo Set objFSO = CreateObject("Scripting.FileSystemObject")
>>"%VBScript%" echo strContent = objFSO.OpenTextFile(WScript.Arguments(0), ForReading, False).ReadAll
>>"%VBScript%" echo Set objRegExp = New RegExp
>>"%VBScript%" echo objRegExp.Global = True
>>"%VBScript%" echo objRegExp.IgnoreCase = False
>>"%VBScript%" echo objRegExp.Pattern = "(\b" ^& WScript.Arguments(1) ^& "\b)\s(\b[^^\s]*\b)"
>>"%VBScript%" echo Set colMatches = objRegExp.Execute(strContent)
>>"%VBScript%" echo WScript.Echo colMatches.Count ^& " Fundstelle(n)"
>>"%VBScript%" echo For Each objMatch In colMatches
>>"%VBScript%" echo WScript.Echo objMatch.SubMatches(1)
>>"%VBScript%" echo Next
>>"%VBScript%" echo End If
cscript /nologo "%VBScript%" "C:\Users\laurenz\Desktop\Liste.txt" "hallo"
for /f %%l in ('cscript /nologo "%VBScript%" "C:\Users\laurenz\Desktop\Liste.txt" "hallo" ^| find "Fundstelle"') do set "nMatches=%%l"
echo %nMatches%
del "%VBScript%"
pause

wenn ich statt dem C:\Users\laurenz\Desktop\Liste.txt
nur Liste.txt angebe passiert auch nix.
und in Liste.txt steht der text hallo drin.

der zeigt mir immer an:
0 Fundstellen
0

hmmm ... ?

greez
Bitte warten ..
Mitglied: Friemler
21.07.2011 um 20:06 Uhr
Hallo carp-catcher,

Es wäre nett, wenn Du bei Code-Postings die Codeformatierung verwenden würdest, das erleichtert das Lesen und vermeidet, dass Quellcode, so wie oben, plötzlich in einer Textbox erscheint oder Einrückungen verloren gehen. Das kann auch noch nachträglich gemacht werden .

Was hast Du denn hinter hallo in C:\Users\laurenz\Desktop\Liste.txt stehen? Deine Anforderung war, das nach dem Suchbegriff stehende zu finden.

Gruß
Friemler
Bitte warten ..
Mitglied: carp-catcher
21.07.2011 um 20:21 Uhr
hier ein screen von meinem bildschirm mit dem neuestem script
Liste.txt befindet sich auf meinem Desktop.

http://img4.fotos-hochladen.net/uploads/bspl1x9q8mazbr.png


hmm ...
?

habe ich was falsch gemacht ?
Bitte warten ..
Mitglied: Friemler
21.07.2011 um 20:27 Uhr
Zitat von carp-catcher:
Ich möchte das der text der rechts neben dem gesuchtem Wort steht über echo ganz normal angezeigt wird.

Ich sagte doch schon, dass nach dem Suchbegriff etwas stehen muss. Schreib' mal <Leerzeichen>Test o.ä. hinter Name in die Liste.txt.

Machst Du Urlaub auf dem Mond? Ich meine ja nur, wegen der langen Leitung...

Gruß
Friemler
Bitte warten ..
Mitglied: carp-catcher
21.07.2011 um 20:41 Uhr
ne ne mach ich nich :D

ajee :D ....das ist bitter ^^
zählen wir das einfach mal als Anfängerfehler :D
...Es funktioniert
yuhuu

Danke deiner Hilfe bzw Geduld

1000 thx

greez
Bitte warten ..
Mitglied: Friemler
21.07.2011 um 20:44 Uhr
Hallo carp-catcher,

schön, schön. Dann markiere den Beitrag doch bitte noch als gelöst.

Gruß
Friemler
Bitte warten ..
Mitglied: carp-catcher
21.07.2011 um 20:48 Uhr
schon passiert

greez
carp-catcher
Bitte warten ..
Ähnliche Inhalte
JavaScript
JavaScript Variabel an PHP übermitteln
gelöst Frage von miichiii9JavaScript3 Kommentare

Hiiii ich habe eine JavaScript Variabel und möchte dies nun in PHP verwenden Bei der Variabel handelt es sich ...

Batch & Shell
Batch: Variable einen Wert zuweisen
gelöst Frage von sklaimBatch & Shell7 Kommentare

Hallo zusammen! Ich bin gerade am verzweifeln Ich habe in Batch 2 Variablen: Wenn ich mir von diesen den ...

Batch & Shell
CSV kleinerer Wert (Batch)
Frage von jochengBatch & Shell3 Kommentare

Ich habe eine CSV Datei mit folgendem Inhalt: 29664;24,95 29664;12,95 29645;9,95 29645;9,95 29655;12,95 29655;24,95 29664;24,95 29655,12,95 29655,24,95 29664;12,95 29664;24,95 ...

Batch & Shell
Batch zum automatischen Bearbeiten eines Wertes
gelöst Frage von M-K-D-BBatch & Shell20 Kommentare

Hallo, ich versuche mich gerade daran, einen Wert in der Registry per Batch zu bearbeiten, komme aber nicht so ...

Neue Wissensbeiträge
MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 4 StundenMikroTik RouterOS4 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 4 StundenSicherheit

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Administrator.de Feedback

Entwicklertagebuch: Die Startseite wurde überarbeitet

Information von admtech vor 6 StundenAdministrator.de Feedback6 Kommentare

Hallo Administrator User, mit dem Release 5.7 haben wir unsere Startseite überarbeitet und die Beiträge und Fragen voneinander getrennt. ...

Vmware

VMware Desktopprodukte sind verwundbar

Information von Penny.Cilin vor 11 StundenVmware

Die VMware-Anwendungen zum Umgang mit virtuellen Maschinen Fusion, Horizon Client und Workstation sowie die Plattform NSX sind verwundbar. Davon ...

Heiß diskutierte Inhalte
Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail
Frage von ahstaxVisual Studio24 Kommentare

Hallo, ich möchte gerne ein vb.net-Tool schreiben, das am Ende eine Outlook-E-Mail erzeugt. Grundsätzlich ist mir klar, wie das ...

Windows Netzwerk
Netzwerk Neustrukturierung
Frage von IT-DreamerWindows Netzwerk16 Kommentare

Hallo verehrte Community und Admins, bei uns im Haus steht eine Neustrukturierung an. Dafür benötige ich von euch ein ...

Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server16 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...