viper-berlin
Goto Top

Batch For Befehl übergibt keine Variable

Ich habe ein cmd Script es soll einen Zeichenfolge in einer Textdatei suchen und mit Ja Nein antworten ob die Zeichenfolge gefunden wurde. PROBLEM es geht 1x und die VARIABLE behält dann immer den gleichen Wert

Hallo wer kann Helfen ?

SYSTEM: WKS Win7 Pro Deu


ich habe ein cmd Script es soll einen Zeichenfolge in einer Textdatei suchen und mit Ja Nein Antworten ob es die Zeichenfolge gefunden wurde PROBLEM unten beschrieben.
Als erstes ein Script was funktioniert läuft störungsfrei....

REM DIESES SCRIPT geht---------------------------------
echo off
set a=X
:anf
echo.
ECHO ++ Eingabe Suche +++++++++++++++++++++++++++++++++
set /p suche=Eingabe:
call :protest
echo Antwort: Gefunden %a%
if /I "%suche%"=="q" exit  
goto anf
:protest
set a=
FOR /F "delims=" %%i IN ('findstr /I /C:"%suche%" "tt.txt"') do (  
    set  Gefunden=%%i
    echo i=%%i
)
IF NOT "%Gefunden%"=="" (  
   ECHO GEFUNDEN JA:
   ) ELSE (
       ECHO GEFUNDEN NEIN:
)
GOTO :EOF
So und jetzt das Problem:
In einem anderen Script in einer Procedure geht das nicht!! die Variable enthält einen anderen wert
also.... echo zeigt den richtigen Wert an aber die Variable wird nicht gesetzt und bleibt auch bei den nächsten Ausführungen gleich.
Die Variable wird nicht übergeben es wird immer der alte Wert angezeigt es geht 1x danach gibt die Procedure immer
den Gleichen Wert raus abwohl echo den richtigen Wert anzeigt also auch außerhalb der Procedure.

OK echo zeigt richtigen Wert an
FOR /F "delims=" %%a IN ('FINDSTR /I /C:"%suche%" "tt.txt"') do echo Gefunden=%%a

NICHT OK Variable bekommt nur 1x den WERT und bleibt dann so
FOR /F "delims=" %%b IN ('FINDSTR /I /C:"%suche%" "tt.txt"') DO set "Gefunden=%%b"

Keine Ahnung woran das Liegt wer hat einen Rat
Thanks face-wink

[Edit Biber] Codeformatierung nachgezogen. [/Edit]

Content-ID: 191272

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

Ausgedruckt am: 09.11.2024 um 01:11 Uhr

bastla
bastla 14.09.2012 um 16:41:00 Uhr
Goto Top
Hallo Viper-Berlin!

Das Stichwort ist (wieder einmal) "delayedExpansion" ...

Es stellt sich aber zusätzlich die Frage, ob es denn sinnvoll/notwendig ist, den Inhalt von zB "%%b" einer anderen Variablen zuzuweisen und nicht gleich direkt weiter zu verarbeiten (ein Grund dafür könnte sein, dass ein Teilstring, der sich nicht per Delimiter erzeugen lässt, gebildet werden soll).

Grüße
bastla
60730
60730 14.09.2012 aktualisiert um 16:46:34 Uhr
Goto Top
moin,

[OT]
zuerst dachte ich, das sieht aber... und dann sah ich:
[Edit Biber] Codeformatierung nachgezogen. [/Edit]

tja pustekuchen.

@Biber: gibts eingentlich nen #RGC für wie baue ich eine Schleife, ohne das Tut des geehrten Friemlers vorher gelesen zu haben?
Oder ist der Herr von und zu copypaste der erbauer?
Hatte ich das nicht neulich noch irgendwo hingemalt?
[/OT]

Ich vermute, du solltest dir mal im klaren werden, wie eine Schleife funktioniert und wie die abgearbeitet wird.
Dazu wirst du hier mehr bereits geschriebene und sehr fundierte Texte finden, als ich graue Haare auf dem Kopf hab.

Gruß
60730
60730 14.09.2012 um 19:35:54 Uhr
Goto Top
Salue bastla,

Ich finde zeile 13 sehr passend, wobei ich mich frage ob die obere batch wirklich so funktioniert....
Dito zeile 2.

Wo wird die variable gefunden geleert?

@ viper-5000/berlin:
Schon weiter gekommen?

Gruss
pieh-ejdsch
pieh-ejdsch 14.09.2012 um 20:27:19 Uhr
Goto Top
moin,

Das mit der Zeile 13 ist mir ja garnet so aufgefallen, aber nur weil Zeile 09 so wirklich Sinnhaft ist?
Für so einen ersten Überblick hilft mir Batchcode erstellen, da ist schon interessant welche Variablen überhaupt Benutzt werden.
Warum läuft der Batch eigentlich ohne #toc-31114940522-13 Setlocal?
Für was wird denn die Schleife gebraucht? Möchtest Du Mit den gefunden Werten weiterarbeiten?
Find würde doch auch die Werte Finden:
@echo off
setlocal
:anf
set /P „suche=Eingabe: “
if not defined suche echo Ende mit [Q]uit &goto :anf
setlocal enabledelayedexpansion
if /i !suche! equ Q exit /b
endlocal
find “%suche%” “D:\Datei” >nul &&echo Gefunden wurde: && find “%suche%” “D:\Datei” ||echo Wert „%suche%“ nicht Gefunden!
Goto :anf

Gruß Phil