Was stimmt nicht mit diesem Code? Es sagt ECHO is off
.
@ECHO off
set /p pattern=Enter id:
findstr %pattern% .\a.txt > result
if %errorlevel%==0 (
set var2= <result
echo %var2%
set var1=%var2:~5,3%
echo %var1% > test.txt
echo %var1%
) else (
echo error
)
del result
pause
Jede Hilfe wird geschätzt.
Wenn Ihre Variable irgendwo leer ist, ist es dasselbe, als wenn Sie den Befehl "Echo" alleine haben, wodurch nur der Status des Echos ausgegeben wird.
Um dies zu vermeiden, sollten Sie alle echo
-Befehle durch Folgendes ersetzen:
echo var2: %var2%
Wenn %var2%
leer ist, wird auf diese Weise nur "echo var2:" anstelle von "echo off" gedruckt.
Wie Laurent feststellte, ist dies kein Problem des ECHO
, es ist ein Problem Ihres Codes.
In Batch-Dateien werden Blöcke vor ihrer Ausführung vollständig analysiert.
Beim Parsen der gesamten prozentualen Erweiterung werden Ihre Variablen anscheinend nicht innerhalb eines Blocks geändert.
Da dies jedoch die verzögerte Erweiterung ist, wird die verzögerte Erweiterung im Moment der Ausführung nicht beim Parsen des Blocks ausgewertet.
Sie muss aktiviert sein, die verzögerte Erweiterung ist standardmäßig deaktiviert.
@ECHO off
setlocal EnableDelayedExpansion
set /p pattern=Enter id:
findstr %pattern% .\a.txt > result
if %errorlevel%==0 (
set var2= <result
echo(!var2!
set var1=!var2:~5,3!
echo(!var1! > test.txt
echo(!var1!
) else (
echo error
)
del result
Ich habe hier das Konstrukt echo(
anstelle von echo
verwendet, da dadurch sichergestellt wird, dass eine leere Zeile wiedergegeben wird, auch wenn die Variable leer ist.
Nicht sicher, ob dieser Beitrag noch gelesen wird, aber dennoch ... Sie sollten Folgendes versuchen: Oben auf den Code direkt nach @echo off
müssen Sie den Code einfügen
setlocal enabledelayedexpansion
Außerdem müssen Sie überall dort, wo Sie Variablen verwenden möchten, die in einem Klammerblock geändert wurden (wie For-Loops
oder If's
), den %
into !
geändert haben, um !varname!
zu erhalten.
Das sollte helfen ...
Schöne Grüße
geisterfurz007
Erstellen Sie zunächst eine Datei a.txt im selben Verzeichnis, in der Sie diese Batch-Datei haben. Schreiben Sie Text in diese Datei. Hinweis: Nur Windows 2000Windows MEWindows XPWindows Vista Windows 7 unterstützt FINDSTR
set /p pattern=Enter id:
findstr %pattern% a.txt > __query.tmp
set /p result=<__query.tmp
if %errorlevel%==0 (
set var2= %result%
echo %var2%
set var1= %var2:~5,3%
echo %var1% > test.txt
echo %var1%
) else (
echo error
)
del __query.tmp
pause
führen Sie diese Baddatei aus. Sie finden eine Teilzeichenfolge (Start = 5, Länge = 3) der ersten Zeile der Zeichenfolge, die Sie in a.txt in einer neu erstellten Datei test.txt haben. Endlich hat es funktioniert!
Die Lösung für Ihr Problem besteht darin, das "Echo" nach dem if-Block zu setzen. Versuche dies:
@ECHO off
set /p pattern=Enter id:
findstr %pattern% .\a.txt > result
if %errorlevel%==0 (
set var2= <result
set var1=%var2:~5,3%
goto print
) else (
echo error
goto result
)
:print
echo %var2%
echo %var1% > test.txt
echo %var1%
:result
del result
pause
Auf diese Weise können Sie die Lösung wie gewünscht sehen. Prost! ;]