2013-01-15 9 views
16

Was ist falsch an diesem Code? Es sagt ECHO is off.Warum sagt dieser Code, dass Echo ausgeschaltet ist?

@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.

+0

Haben Sie versucht, '@ECHO off' oben zu entfernen? –

+8

Dann heißt es, Echo ist eingeschaltet. – user1979801

Antwort

19

Wenn Ihre Variable irgendwo leer ist, ist es dasselbe wie der Befehl "echo", der nur den Status von echo ausgibt.

echo var2: %var2% 

auf diese Weise, wenn %var2% leer ist wird es nur drucken:

Um dies zu vermeiden, sollten Sie alle Ihre echo Befehle mit so etwas wie diese ersetzen „echo var2:“ anstelle von „echo off“.

+0

Ok, aber ich erwarte, dass var2 nicht leer ist, hast du es ausgeführt? – user1979801

+1

Dann ist es kein Problem mit echo, es ist ein Problem mit dem Code oder den Dateien, die Sie versuchen zu lesen. Um es jedoch zu debuggen, wäre es besser, jedes Echo wie in meiner Antwort erwähnt voran zu stellen. Zumindest werden Sie wissen, wo Ihr Problem ist. –

+0

obwohl 'result' einen Stringwert hat, var2 = user1979801

0

enter image description here zunächst eine Datei a.txt im gleichen Verzeichnis erstellen u diese Batchdatei hat ... schreiben, dass etwas Text ... Hinweis: Nur Windows 2000 Windows ME Windows XP Windows 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 

Lauf dieses Bad Datei .. finden Sie einen Teil (Start = 5, Länge = 3) von der ersten Zeile der Zeichenfolge, die Sie in a.txt in einer neu erstellte Datei test.txt haben zu finden. Endlich hat es funktioniert!

+0

immer noch das gleiche Ergebnis – user1979801

+0

was tippst du ein Gib eine ID ein: –

+0

ein Text, der schon in a.txt ist – user1979801

13

Wie Laurent sagte, es ist kein Problem der ECHO, es ist ein Problem Ihres Codes.

In Batch-Dateien werden Blöcke vollständig analysiert, bevor sie ausgeführt werden.
Beim Parsing wird die gesamte prozentuale Expansion durchgeführt, daher scheint es, dass Ihre Variablen nicht innerhalb eines Blocks geändert werden können.

Aber dafür existiert die verzögerte Erweiterung, die verzögerte Erweiterung wird im Moment der Ausführung ausgewertet, nicht während der Blockierung.

Es muss aktiviert sein, standardmäßig ist die verzögerte Erweiterung 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 

habe ich hier das Konstrukt echo( statt echo wie dies gewährleisten wird leer eine leere Zeile, selbst wenn die Variable Echo.

0

Die Lösung für Ihr Problem besteht darin, die "Echo" s nach dem if-Block abgeschlossen ist. Try this:

@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 sehen, wie man wollte. Prost! ;]

4

Bin mir nicht sicher, ob dieser Beitrag noch gelesen wird, aber trotzdem. sollten Sie versuchen, die folgenden: Am Anfang des Codes direkt nach @echo off Sie in

setlocal enabledelayedexpansion 

Zusätzlich überall setzen müssen Sie Variablen in einem Block von Klammern geändert verwenden (wie For-Loops oder If's) Sie müssen ändern Sie den % in ! zu bekommen !varname!

Diese helfen sollte ...

Grüße

gegisterfurz007

Verwandte Themen