FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
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 |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Klarade millennium-buggen
|
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" Senast redigerad av Conny Westh den 2013-03-19 klockan 00:19 |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
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? |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Klarade millennium-buggen
|
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 ) Senast redigerad av Conny Westh den 2013-03-19 klockan 09:38 |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Medlem
|
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
![]() ![]() Skall testa lite tack för din hjälp ![]() |
||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Klarade millennium-buggen
|
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 ) |
||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Medlem
|
Fick ihop det precis som jag ville tack så mycket för din hjälp
![]() |
||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Klarade millennium-buggen
|
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 ) |
||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Medlem
|
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:
|
||
![]() |
![]() |
![]() |
#10 | ||
|
|||
Medlem
|
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. |
||
![]() |
![]() |
Svara |
|
|