[2000/XP] FINDSTR, alleen woord matchen?

Pagina: 1
Acties:
  • 187 views sinds 30-01-2008
  • Reageer

  • DeMoN
  • Registratie: Maart 2001
  • Laatst online: 12-03 14:25

DeMoN

Pastafari

Topicstarter
Voor de mensen die bekend zijn met "findstr", ik wil alleen een woord matchen uit een bepaalde string.

Dit is er bijv. aan de hand:

ipconfig geeft:
code:
1
2
3
4
5
6
7
8
Windows 2000 IP-configuratie

Ethernet adapter LAN-verbinding:

        Verbindingsspecifiek DNS-achtervoegsel:
        IP-adres . . . . . . . . . . . . . . .: 10.108.128.101
        Subnetmask . . . . . . . . . . . . . .: 255.255.255.0
        Standaardgateway . . . . . . . . . . .: 10.108.128.254


Stel, ik wil het woord "Subnetmask" als output hebben.
Hoe doe ik dat? Het lijkt wel helemaal niet mogelijk onder Windows of zo..

Dit bijv:
code:
1
ipconfig |findstr Subnetmask

geeft:
code:
1
Subnetmask . . . . . . . . . . . . . .: 255.255.255.0

Maar ik wil dit:
code:
1
ipconfig |findstr Subnetmask

geeft:
code:
1
Subnetmask


Nu heb ik al grep voor Windows en egrep voor Windows gedownload (dat zijn eigenlijk tools voor Unix/Linux), maar daar zit deze optie ook niet in :?

grep op mijn linuxbak heeft gewoon deze optie:
(uit grep --help)
code:
1
 -o, --only-matching       show only the part of a line matching PATTERN


Kent iemand een cmd-achtig tooltje die mij deze functionaliteiten kan bieden? *D

Gamertag: Cosmicv0id
"Het woord Gods is voor mij niets meer dan een expressie en het product van menselijke zwakheid. De Bijbel is een verzamelwerk van legendes die achtenswaardig zijn maar ook primitief en kinderachtig.'' - Albert Einstein


  • DeMoN
  • Registratie: Maart 2001
  • Laatst online: 12-03 14:25

DeMoN

Pastafari

Topicstarter
Kick.

Gamertag: Cosmicv0id
"Het woord Gods is voor mij niets meer dan een expressie en het product van menselijke zwakheid. De Bijbel is een verzamelwerk van legendes die achtenswaardig zijn maar ook primitief en kinderachtig.'' - Albert Einstein


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Waarom zou je dit willen als ik vragen mag - als je regel gematched wordt dan weet je toch dat alles wat in die regel zit dat woord is dat je zoekt (of werk je specifiek met regexes)?

Oftewel - wat is de exacte toepassing van deze vraag? :)

  • DeMoN
  • Registratie: Maart 2001
  • Laatst online: 12-03 14:25

DeMoN

Pastafari

Topicstarter
elevator schreef op woensdag 01 februari 2006 @ 16:53:
Waarom zou je dit willen als ik vragen mag - als je regel gematched wordt dan weet je toch dat alles wat in die regel zit dat woord is dat je zoekt (of werk je specifiek met regexes)?

Oftewel - wat is de exacte toepassing van deze vraag? :)
Ik wil idd met regexen werken.
Dit van die Subnetmasker was gewoon een simpel voorbeeld.

Het exacte doel is om hiermee overzichtelijke bestanden te kunnen maken.

Ik wil dit namelijk verwerken in een opstartscript.
Dat opstartscript verwerken alle PC's in het netwerk bij het inloggen.
Daarin staat dan bijv: ipconfig /all | findstr [REGEXMEUK] > f:\everyone\pcinfo.txt
Dan kan ik het zo maken dat op een gegeven moment pcinfo.txt een heel overzichtelijk bestand wordt.

PC naam: <blaat>
IP-Adres: <blaat>
MAC-Adres: <blaat>

Zoiets zeg maar.. dat is gewoon wat overzichtelijker dan allemaal lines onder elkaar wat afkomstig is uit de output van ipconfig /all
:)

Gamertag: Cosmicv0id
"Het woord Gods is voor mij niets meer dan een expressie en het product van menselijke zwakheid. De Bijbel is een verzamelwerk van legendes die achtenswaardig zijn maar ook primitief en kinderachtig.'' - Albert Einstein


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

hmm. Of het met findstr kan weet ik niet, maar:

- Wat wil je precies bereiken? Met "For" en dergelijke kan je soms nog wel e.e.a.
- Ken je 'systeminfo.exe' ?

Verwijderd

DeMoN schreef op woensdag 01 februari 2006 @ 16:59:
[...]


Ik wil idd met regexen werken.
Dit van die Subnetmasker was gewoon een simpel voorbeeld.

Het exacte doel is om hiermee overzichtelijke bestanden te kunnen maken.

Ik wil dit namelijk verwerken in een opstartscript.
Dat opstartscript verwerken alle PC's in het netwerk bij het inloggen.
Daarin staat dan bijv: ipconfig /all | findstr [REGEXMEUK] > f:\everyone\pcinfo.txt
Dan kan ik het zo maken dat op een gegeven moment pcinfo.txt een heel overzichtelijk bestand wordt.

PC naam: <blaat>
IP-Adres: <blaat>
MAC-Adres: <blaat>

Zoiets zeg maar.. dat is gewoon wat overzichtelijker dan allemaal lines onder elkaar wat afkomstig is uit de output van ipconfig /all
:)
schrijf het weg naar >%computername%_info.txt
Dan heb je weliswaar veel kleine bestandjes, maar wordt zoeken wel makkelijk :)

  • DeMoN
  • Registratie: Maart 2001
  • Laatst online: 12-03 14:25

DeMoN

Pastafari

Topicstarter
Wat bedoel je?
Ik mijn post boven je is toch redelijk duidelijk te lezen wat ik wil bereiken? :)
Met "For" en dergelijke kan je soms nog wel e.e.a.
Klopt, ik heb me er even in verdiept, maar het kan niet wat ik wil.
Stel ik maak een batch file maar daarin:
Batchfile:
1
2
3
4
5
6
7
8
@echo off

REM tokens=13, 16 en 17 zijn IP's

for /f "tokens=13,16,17" %%k IN ('ipconfig') do (
@echo. K=%%k
@echo. L=%%l
@echo. M=%%m)


Dan geeft dat als output:

code:
1
2
3
4
5
6
7
8
9
 K=.
 L=.:
 M=10.108.128.101
 K=.
 L=255.255.255.0
 M=
 K=10.108.128.254
 L=
 M=


M.a.w, zo heb ik het bijna voor elkaar.
Het jammere is alleen dat hij alsnog de loop per line doorloopt. Vandaar dat ik ook met die 'tokens' moet spelen in die FOR loop.
Alleen zijn die tokens een hels werk en er hoeft maar een beetje aan de situatie te veranderen en het werkt niet meer.
- Ken je 'systeminfo.exe' ?
Is denk ik XP-only?
Op het moment wil ik dit geheel liever werkend zien in een 2K omgeving.
:)
Verwijderd schreef op donderdag 02 februari 2006 @ 10:17:
[...]


schrijf het weg naar >%computername%_info.txt
Dan heb je weliswaar veel kleine bestandjes, maar wordt zoeken wel makkelijk :)
Kleine, maar krachtige tip!
Dit zou ik nog wel eens kunnen gebruiken.. dan zet ik er gewoon een IF EXIST bij zodat hij de volgende keer die file niet meer aanmaakt.
Ga het zo maar ff proberen dan, thx :7

Gamertag: Cosmicv0id
"Het woord Gods is voor mij niets meer dan een expressie en het product van menselijke zwakheid. De Bijbel is een verzamelwerk van legendes die achtenswaardig zijn maar ook primitief en kinderachtig.'' - Albert Einstein


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

DeMoN schreef op donderdag 02 februari 2006 @ 11:17:
Klopt, ik heb me er even in verdiept, maar het kan niet wat ik wil.
Nouja - dat kan het wel natuurlijk - als je

for /f "tokens=*" %%k IN ('ipconfig ^| findstr /i /c:"IP Address"') do @echo %%k

Zou gebruiken ben je al een heel eind gok ik :)

  • DeMoN
  • Registratie: Maart 2001
  • Laatst online: 12-03 14:25

DeMoN

Pastafari

Topicstarter
elevator schreef op donderdag 02 februari 2006 @ 11:20:
[...]

Nouja - dat kan het wel natuurlijk - als je

for /f "tokens=*" %%k IN ('ipconfig ^| findstr /i /c:"IP Address"') do @echo %%k

Zou gebruiken ben je al een heel eind gok ik :)
Lol, dat kan natuurlijk ook idd 8)7
Wat je dan doet is alle tokens per line vergelijken d.m.v. een zoekopdracht van findstr.

Hmm.. B)

Je zou zit kunnen doen:
code:
1
2
3
4
5
6
@echo off
for /f "tokens=13,16,17" %%k IN ('ipconfig ^| findstr /i "IP-Adres Subnetmask Standaardgateway"') do (
@echo. IP = %%k
@echo. Mask = %%l
@echo. Gateway = %%m
)

Dan krijg je dit:
code:
1
2
3
4
5
6
7
8
9
 IP = .
 Mask = .:
 Gateway = 10.108.128.101
 IP = .
 Mask = 255.255.255.0
 Gateway =
 IP = 10.108.128.254
 Mask =
 Gateway =


Maar dan krijg je zooi zoals " IP = . " er doorheen omdat die '.' matched met een tokenpositie vanaf een verkeerde line.
Dit kan je dan wel oplossen door verschillende lussen te plaatsen:

code:
1
2
3
4
5
6
7
8
9
@echo off
for /f "tokens=17" %%k IN ('ipconfig ^| findstr /i "IP-Adres"') do (
@echo. IP = %%k)

for /f "tokens=16" %%l IN ('ipconfig ^| findstr /i "Subnetmask"') do (
@echo. Mask = %%l)

for /f "tokens=13" %%m IN ('ipconfig ^| findstr /i "Standaardgateway"') do (
@echo. Gateway = %%m)


Output:

code:
1
2
3
 IP = 10.108.128.101
 Mask = 255.255.255.0
 Gateway = 10.108.128.254


Woei :P

Bedankt voor het zetje in de goede richting! :Y)

* DeMoN gaat verder met zijn gepruts B)

[ Voor 9% gewijzigd door DeMoN op 02-02-2006 11:47 ]

Gamertag: Cosmicv0id
"Het woord Gods is voor mij niets meer dan een expressie en het product van menselijke zwakheid. De Bijbel is een verzamelwerk van legendes die achtenswaardig zijn maar ook primitief en kinderachtig.'' - Albert Einstein


Verwijderd

als je nu nog "tokens=2 delims=:" gebruikt, wordt het helemaal mooie code :)

edit: ff zelf wat geprutst, zoals je ziet moet je voor jou code wel een nl (xp?) versie hebben. dit werkt voor een engelse xp versie iig :)

verder nog een loophole in deze methode... als je 2 netwerkkaarten hebt kom je ook in de problemen :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
set count=0
@echo off
for /f "tokens=2 delims=:" %%k IN ('ipconfig ^| findstr /i "Address Subnet gateway"') do call :logit %%k
goto :overig

:logit
set /a count+=1
if %count%==1 echo IP = %1>log.txt
if %count%==2 echo Mask = %1>>log.txt
if %count%==3 echo Gateway = %1>>log.txt
goto :eof

:overig
rest script...

[ Voor 108% gewijzigd door Verwijderd op 02-02-2006 12:18 ]


  • DeMoN
  • Registratie: Maart 2001
  • Laatst online: 12-03 14:25

DeMoN

Pastafari

Topicstarter
Verwijderd schreef op donderdag 02 februari 2006 @ 12:07:
als je nu nog "tokens=2 delims=:" gebruikt, wordt het helemaal mooie code :)
Jup! Dat maakt het idd wat stabieler. En helemaal bij ipconfig want die ":" komt alleen voor, voor het (bijv.) IP Adres :)
Thx :)

edit: BATCH scripting onder Windows is zo nog 'ingewikkelder' dan op Linux :P

edit2: Dank voor je stukje code, zoiets was ik net aan het maken ;)

[ Voor 28% gewijzigd door DeMoN op 02-02-2006 12:19 ]

Gamertag: Cosmicv0id
"Het woord Gods is voor mij niets meer dan een expressie en het product van menselijke zwakheid. De Bijbel is een verzamelwerk van legendes die achtenswaardig zijn maar ook primitief en kinderachtig.'' - Albert Einstein

Pagina: 1