2013-01-15 11 views
16

Co jest nie tak z tym kodem? Jest napisane: ECHO is off.Dlaczego ten kod mówi, że echo jest wyłączone?

@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 

Każda pomoc jest doceniana.

+0

Czy próbowałeś usunąć "@ECHO off" na wierzchu? –

+8

Następnie mówi, że Echo jest włączone. – user1979801

Odpowiedz

19

Jeśli twoja zmienna jest gdzieś pusta, będzie to tak samo jak samo polecenie "echo", które po prostu wydrukuje status echa.

Aby tego uniknąć, należy wymienić wszystkie swoje polecenia echo z czymś takim:

echo var2: %var2% 

ten sposób, jeśli %var2% jest pusta to będzie po prostu wydrukować „Echo var2:” zamiast „echo off”.

+0

OK, ale oczekuję, że var2 nie będzie pusty, czy go uruchomisz? – user1979801

+1

To nie jest problem z 'echo', jest to problem z kodem lub plikami, które próbujesz odczytać. Aby go jednak zdebugować, lepiej byłoby przedrostek każdego echa, jak wspomniano w mojej odpowiedzi. Przynajmniej będziesz wiedział, gdzie jest twój problem. –

+0

chociaż "wynik" ma pewną wartość ciągu, var2 = user1979801

0

enter image description here Najpierw utwórz a.txt pliku w tym samym katalogu, u mieć ten plik wsadowy ... napisać jakiś tekst na tym, że ... Uwaga: tylko Windows 2000 Windows ME Windows XP Windows Vista System Windows 7 obsługuje 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 

uruchomić ten plik kąpiel .. znajdziesz podciąg (start = 5, długość = 3) w pierwszym wierszu ciąg masz w a.txt w nowo utworzonym pliku Test.txt. Nareszcie działało!

+0

nadal ten sam wynik – user1979801

+0

co piszesz Wpisz: –

+0

tekst, który jest już w a.txt – user1979801

13

Jak stwierdził Laurent, nie jest to problem z ECHO, jest to problem twojego kodu.

W plikach wsadowych bloki są analizowane przed wykonaniem.
Podczas analizowania wszystkich rozszerzeń procentowych zostanie wykonane, więc wydaje się, że zmiennych nie można zmienić wewnątrz bloku.

Ale w tym przypadku opóźnione rozwinięcie, opóźnione rozwinięcie zostanie ocenione w momencie wykonania, a nie podczas analizowania bloku.

Musi być włączona, ponieważ domyślnie opóźnione rozszerzenie jest wyłączone.

@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 

użyłem tutaj konstrukt echo( zamiast echo jak to zapewni powtarzając pusty wiersz nawet jeśli zmienna jest pusta.

0

Rozwiązaniem twojego problemu jest wstawienie "echa" po zakończeniu bloku if. Spróbuj tego:

@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 

W ten sposób można zobaczyć rozwiązanie jak chciałeś. Pozdrawiam! ;]

4

Nie jestem pewien, czy ten wpis jest nadal czytany, ale mimo to. Należy spróbować następujących czynności: Na szczycie kodu tuż po @echo off trzeba umieścić w

setlocal enabledelayedexpansion 

Dodatkowo gdziekolwiek chcesz używać zmiennych zmienione w bloku nawiasach (jak For-Loops lub If's) trzeba zmienić % do ! uzyskać !varname!

To powinno być pomaganie ...

Pozdrowienia

geisterfurz007

Powiązane problemy