wake-up-neo.net

Warum sagt dieser Code, dass das Echo ausgeschaltet ist?

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.

22
user1979801

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.

29
this.lau_

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.

18
jeb

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

5
geisterfurz007

enter image description hereErstellen 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!

0
Manoj Purohit

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! ;] 

0
jfajunior