WN

WN (https://www.wn.se/forum/index.php)
-   Off Topic (https://www.wn.se/forum/forumdisplay.php?f=7)
-   -   batch fil se om en stäng innehåller ett värde (https://www.wn.se/forum/showthread.php?t=1057264)

spyvingen 2013-03-18 20:05

batch fil se om en stäng innehåller ett värde
 
Hej jag skulle vilja vet aom det finns ett enkelt sätt att i en batchfil går att se om en läng sträng innehåller ett ord eller en adress

tex
set str1 = "test.se/test/hej/pelle"
set str2 ="test.se"

jag vill alltså ta reda på om str1 innehåller str2 och vill då köra en GOTO

Conny Westh 2013-03-19 00:14

Här är ett exempel på hur du kan lösa problemet:

Kod:

@echo off
::
: SeekText.bat - Test if pattern in string
: Param1 - the pattern
: Param2 - the string to check
::

echo.%2 | findstr /C:"%1" 1>nul

if errorlevel 1 (
  echo. Returnerade 1 - pattern not found
  goto inget
) ELSE (
  echo. Returnerade 0 - found pattern
  goto hittat
)
goto end

:inget
echo Hittade INGET intressant...
goto end

:hittat
echo Hittade vad vi ville ha!
goto end

:end
echo Done.


Så här kan du använda batfilen:
Kod:

SeekText "test.se" "test.se/test/hej/pelle"

spyvingen 2013-03-19 07:33

Tack så mycket.
En fråga bara om jag nu kör seektext i min andra bat fil hur kan jag få ut ett värde till mitt script att jag skall tex. göra något om seektext ger ett visst värde.

if SeekText "test.se" "test.se/test/hej/pelle" == 1 goto gåvidare

skulle man kunna köra något liknande spånar bara nu då jag är helt noob på detta och då bara se till att seektext ger 1 när pattern är hittat?

Conny Westh 2013-03-19 09:31

Jag har tänkt att du ska ta SeekText.bat och kopiera till din egen bat-fil som du modifierar precis som du vill ha den.

Kärnan i SeekText.bat är att den anropar DOS-kommandot FindStr, det är den filen som egentligen gör jobbet och sen kollar man innehållet i variabeln errorlevel som kan vara 0 om den hittar texten eller 1 om den inte hittar den. Sen hoppar den till två olika lablar beroende på om den hittade eller inte i dessa lablar kan du skriva vad du vill göra.

Man kan utveckla detta vidare ganska långt men jag vet inte vad du egentligen vill göra i slutändan så det kan finnas många möjligheter utöver det jag visat.

Det går givetvis att korta ner bat-filen till ett minimum:

Kod:

@echo off
::
: SeekText.bat - Test if pattern in string
: Param1 - the pattern
: Param2 - the string to check
::

echo.%2 | findstr /C:"%1" 1>nul

if errorlevel 1 (
  echo. Returnerade 1 - pattern not found - Do what you want here
) ELSE (
  echo. Returnerade 0 - found pattern - Do what you want here
)


spyvingen 2013-03-19 09:38

ahh nu är jag med trodde du menade att jag skulle anropa den men att lägga in i min befintliga fungerar ju lika bra :) Har inte tänkt så långt :)

Skall testa lite tack för din hjälp :)

Conny Westh 2013-03-19 09:59

Här är en variant som innehåller exakt de två variabler du skrev om i ditt första inlägg:

Kod:

@echo off
::
: SpyVingen.bat - Test if pattern in string
: str1 - the pattern
: str2 - the string to check
::

set str1 = "test.se/test/hej/pelle"
set str2 ="test.se"

echo.%str2% | findstr /C:"%str1%" 1>nul

if errorlevel 1 (
  echo. Returnerade 1 - pattern not found - Do what you want here
) ELSE (
  echo. Returnerade 0 - found pattern - Do what you want here
)


spyvingen 2013-03-19 10:22

Fick ihop det precis som jag ville tack så mycket för din hjälp :)

Conny Westh 2013-03-19 11:35

Såg att jag klantat till syntaxen lite i mitt förra inlägg, så här ska det se ut:

Kod:

@echo off
::
: SpyVingen.bat - Test if pattern in string
: str1 - the pattern
: str2 - the string to check
::

set str1=test.se/test/hej/pelle
set str2=test.se

rem Tänk på att ange \ som [\\] eller som \\\\ i sökmönstret enligt odokumenterad suntax för FindStr: http://stackoverflow.com/questions/8844868/what-are-the-undocumented-features-and-limitations-of-the-windows-findstr-comman


rem Med litteraler
rem echo. %str1% | findstr /L /i /C:%str2% 1>nul

rem med Regular expression
echo. %str1% | findstr /R /i /C:%str2% 1>nul


if errorlevel 1 (
  echo. Returnerade 1 - pattern [%str2%] not found in string [%str1%] - Do what you want here
) ELSE (
  echo. Returnerade 0 - found pattern [%str2%] in string [%str1%] - Do what you want here
)


spyvingen 2013-03-19 12:38

Ahh tack slapp använda det då jag inte skriver ut \ i strängen utan bara läser in en stäng och jämför med en utan \ men tack för att du skrev det iaf. :)

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20465224)
Såg att jag klantat till syntaxen lite i mitt förra inlägg, så här ska det se ut:

Kod:

@echo off
::
: SpyVingen.bat - Test if pattern in string
: str1 - the pattern
: str2 - the string to check
::

set str1=test.se/test/hej/pelle
set str2=test.se

rem Tänk på att ange \ som [\\] eller som \\\\ i sökmönstret enligt odokumenterad suntax för FindStr: http://stackoverflow.com/questions/8844868/what-are-the-undocumented-features-and-limitations-of-the-windows-findstr-comman


rem Med litteraler
rem echo. %str1% | findstr /L /i /C:%str2% 1>nul

rem med Regular expression
echo. %str1% | findstr /R /i /C:%str2% 1>nul


if errorlevel 1 (
  echo. Returnerade 1 - pattern [%str2%] not found in string [%str1%] - Do what you want here
) ELSE (
  echo. Returnerade 0 - found pattern [%str2%] in string [%str1%] - Do what you want here
)



spyvingen 2013-03-19 12:41

Eftersom du ändå är har så har jag en liten fråga mitt första utdrag av scriptet så hade jag i början set namn = %1 tex men jag kunde aldrig få det att funka genom att använda %namn% efter detta.

Vad kan det bero på får det inte vara mellanslag eller nått eller vad kan gått fel. Mina variabler blev bara tomma.

spyvingen 2013-03-19 12:59

Hehe skrev om scriptet nu och jag tror problemet var att jag skrev set namn = %1 istället för set namn=%1

Conny Westh 2013-03-19 13:32

Ja om du vid 'set var = %1' eller 'set var = %namn%' har ett mellanslag direkt efter '='-tecknet så nollställer den variabeln. Jag gjorde samma syntaxfel i ett av mina script ovan.

spyvingen 2013-03-25 15:23

Märkte det när jag byggde om hela scriptet.

Tack för din hjälp :)


Alla tider är GMT +2. Klockan är nu 18:14.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson