2013-01-15 10 views
16

Cosa c'è di sbagliato con questo codice? Dice ECHO is off.Perché questo codice dice che l'eco è disattivato?

@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 

Qualsiasi aiuto è apprezzato.

+0

Hai provato a rimuovere '@ECHO off 'in alto? –

+8

Poi dice che Echo è acceso. – user1979801

risposta

19

Se la variabile è vuota da qualche parte, sarà come avere il comando "echo" da solo, che stamperà lo stato di eco.

Per evitare questo, è necessario sostituire tutti i comandi echo con qualcosa di simile:

echo var2: %var2% 

questo modo, se %var2% è vuota sarà solo stampare "var2 eco:" invece di "eco off".

+0

Ok, ma mi aspetto che var2 non sia vuoto, l'hai eseguito? – user1979801

+1

Quindi non è un problema con 'echo', è un problema con il codice oi file che stai cercando di leggere. Tuttavia, per eseguire il debug, è preferibile aggiungere un prefisso a ogni eco come indicato nella risposta. Almeno saprai dove si trova il tuo problema. –

+0

sebbene 'risultato' abbia qualche valore stringa, var2 = user1979801

0

enter image description here Innanzitutto creare un file a.txt nella stessa directory u avere questo file batch ... scrivere qualche testo in quella ... Nota: solo Windows 2000 di Windows ME Windows XP Windows Vista di Windows 7 supporta 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 

eseguire questo file bagno .. si troverà una stringa (start = 5, lunghezza = 3) della prima linea di corda che avete in a.txt in un test.txt file appena creato. Finalmente ha funzionato!

+0

ancora lo stesso risultato – user1979801

+0

cosa stai digitando Inserisci ID: –

+0

del testo che è già in a.txt – user1979801

13

Come ha affermato Laurent, non è un problema dello ECHO, è un problema del codice.

Nei file batch, i blocchi vengono analizzati completi prima di essere eseguiti.
Durante l'analisi di tutta l'espansione percentuale verrà eseguita, quindi sembra che le variabili non possano essere modificate all'interno di un blocco.

Ma per questo esiste l'espansione ritardata, l'espansione ritardata verrà valutata nel momento dell'esecuzione non durante l'analisi del blocco.

Deve essere abilitato, per impostazione predefinita l'espansione ritardata è disabilitata.

@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 

Ho usato qui il costrutto echo( anziché echo come questo farà sì eco una riga vuota anche se la variabile è vuota.

0

La soluzione per il tuo problema è inserire gli "echo" dopo che il blocco if è stato completato. Prova questo:

@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 

questo modo si può vedere la soluzione come si voleva. Cheers! ;]

4

Non sicuro, se questo post è ancora letto, ma tuttavia. Si dovrebbe provare la seguente: In cima il codice giusto dopo @echo off devi mettere in

setlocal enabledelayedexpansion 

Inoltre nessuna parte che si desidera utilizzare le variabili modificate in un blocco di parentesi quadre (come For-Loops o If's) si deve cambiare il % in ! per ottenere !varname!

Questo dovrebbe essere aiutare ...

Saluti

geisterfurz007

Problemi correlati