okidoki
Goto Top

Batch Zeichen Begrenzung umgehen

Guten Morgen,
bastla hat mir schon mit seinem Code geholfen (https://www.administrator.de/index.php?content=178956#727993). Allerdings habe ich noch eine Zusatzfrage, die ich jetzt als zusätzlen Thread eröffne, in der Hoffnung, dass das so ok ist!

> Zitat von @bastla:
> Eine Suchschleife lässt sich auch für mehrere Suchbegriffe zusammenfassen - etwa:
>
set "Gefunden="  
> > for %%i in (321asdf qwerqwe sonstnochwas) do findstr /x "%%i" "suche.txt">nul && set  
> > "Gefunden=True"  
> > if defined Gefunden echo YES
> > 

Guten Tag,

zum (super) Code von bastla möchte ich gerne noch wissen, sie sich die Schleife um weitere Suchbegriffe (außerhalb der
Begrenzung ca. 2000/8000 Zeichen "MS: Befehlszeile maximal 2.047 bzw. 8.191 Zeichen") erweitern läßt?
Im Sinne von, wie eine zweite und dritte Schleife eingefügt werden kann...

OKIDOKI


Content-Key: 179515

Url: https://administrator.de/contentid/179515

Printed on: April 19, 2024 at 06:04 o'clock

Member: bastla
bastla Jan 25, 2012 at 14:03:35 (UTC)
Goto Top
Hallo OKIDOKI!

Du kannst ja nacheinander so viele Zeilen der Art
for %%i in (321asdf qwerqwe sonstnochwas) do findstr /x "%%i" "suche.txt">nul && set "Gefunden=True"
wie nötig schreiben - es wird ja nur, wenn ein Suchwort gefunden wurde, der Schalter %Gefunden% gesetzt ...

Grüße
bastla
Member: pieh-ejdsch
pieh-ejdsch Jan 25, 2012 at 14:21:47 (UTC)
Goto Top
Moin bastla und OKIDOKI,

Was spricht denn dagegen, am Ende deines Codes ein goto :EOF einzufügen.
Danach kommen Zeile für Zeile deine ganzen Suchbegriffe in den Batch hinein.
Somit hast Du auf keinen Fall eine extra Textdatei.
Deine Suchzeile schreibst du dann etwas um:
for /f "delims=:" %%i in ('findstr /n /i /x /c:"goto :eof" "%~f0"') do set /a Skip =%%i  
chcp 1252 >nul
for /f "skip=%skip% usebackq delims=" %%i in ("%~f0") do findstr /x "%%i" "suche.txt">nul && set "Gefunden=True"  
chcp 850 >nul
[Edit]
Ein Temporäre Vergeichsdatei zu erstellen wäre etwas Performanter und sicherer.
codepagewechsel eingefügt
[Edit]

Gruß Phil
Member: OKIDOKI
OKIDOKI Jan 25, 2012 at 14:24:54 (UTC)
Goto Top
Hallo bastla,

das ist ja simple ...
Nach jeder Schleife würde ich dann vermutlich die Abfrage nach True machen und die Schleife erneut setzen, oder? Gibt es sonst eine "Gesamtabfrage" für bsp. 3 Schleifen?

Vielen Dank!
OKIDOKI
Member: OKIDOKI
OKIDOKI Jan 25, 2012 at 14:29:27 (UTC)
Goto Top
Moin Phil,
das übersteigt mein Verständnis face-wink
Wohin sollen denn die Suchbegriffe? Und können die, wenn ich wüßte wie, auch in eine (mehrere) Zeile(n) geschrieben werden?

Gruß OKIDOKI
Member: pieh-ejdsch
pieh-ejdsch Jan 25, 2012 at 14:42:15 (UTC)
Goto Top
Dein Batch sieht nur als Beispiel jetzt so aus:
@echo off&setlocal
set "Gefunden="  
for /f "delims=:" %%i in ('findstr /n /i /x /c:"goto :eof" "%~f0"') do set /a Skip =%%i  
chcp 1252 >nul
for /f "skip=%skip% usebackq delims=" %%i in ("%~f0") do findstr /x "%%i" "suche.txt">nul && set "Gefunden=True"  
chcp 850 >nul
if defined gefunden echo Yes

rem hier ist noch viel mehr BatchNutzCode

echo Ende der Batch nächste Zeile
goto :eof
Deine Suchbegriffe kommen Einzeln je Weitere Zeile unter das letzte goto :eof.

zur Erklärung:
Die erste For setzt die Zeilennummer des zuletzt gefundenen "goto :eof" als Skip.
Die zweite Forschleife gibt Dir alle Folgenden Zeilen der Batch nacheinander an Findstr aus (ohne Begrenzung).

Gruß Phil
Member: bastla
bastla Jan 25, 2012 at 16:23:56 (UTC)
Goto Top
Hallo OKIDOKI!
Nach jeder Schleife würde ich dann vermutlich die Abfrage nach True machen und die Schleife erneut setzen, oder?
Das würde den Ablauf beschleunigen - Du kannst das aber auch nur ein einziges Mal nach allen Schleifen durchführen, da wie gesagt, der Schalter vorweg "ausgeschaltet" und beim ersten (und jedem weiteren) Fund "eingeschaltet" wird (und danach auch bleibt) - insofern wäre das eine "Gesamtabfrage" (oder was meintest Du damit?)

Grüße
bastla
Member: bastla
bastla Jan 25, 2012 at 16:31:17 (UTC)
Goto Top
Hallo PH!

Ich habe Derartiges (in Anlehnung an das "Urzeit-Basic-DATA" auch schon so umgesetzt:
@echo off & setlocal
::DATA#Suchbegriff1 Suchbegriff2 Suchbegriff3
::DATA#Suchbegriff4 Suchbegriff5 Suchbegriff6

set "Gefunden="  
for /f "tokens=1* delims=#" %%a in ('findstr /b "::DATA#" "%~0"') do for %%i in (%%b) do findstr /x "%%i" "suche.txt">nul && set "Gefunden=True"  
if defined Gefunden echo Yes
Die DATA-Zeilen können dabei an beliebiger Stelle im Batch stehen ...

Grüße
bastla
Member: OKIDOKI
OKIDOKI Jan 25, 2012 at 16:32:15 (UTC)
Goto Top
Hallo bastla,

genau das meine ich!

Totzdem auch Phil danke für seinen Beitrag!!! Das Problem was ich hatte war, möglichst viele Suchwörter unterzubringen. Irgendwie hat der Code nicht funktioniert. Es gab nur die Dosbox (blieb schwarz) und auch PAUSE am Ende brachte kein Ergebnis ;-(

Vielen Dank!
OKIDOKI