2013-01-15 3 views
16

이 코드의 문제점은 무엇입니까? 그것은 ECHO is off라고합니다.왜이 코드는 echo가 꺼져 있다고 말합니까?

@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 

도움을 주시면 감사하겠습니다.

+0

위에 @ECHO를 제거하려고 했습니까? –

+8

그러면 에코가 켜져 있다고합니다. – user1979801

답변

19

변수가 어딘가에 있으면 "echo"명령을 사용하는 것과 같습니다. 단지 echo 상태를 출력합니다.

는이를 방지하기 위해이 같은 모든 당신의 echo 명령을 교체해야합니다 :

echo var2: %var2% 

그 방법을 %var2%는 그냥 인쇄됩니다 비어있는 경우 "에코 VAR2를"대신 "오프 에코"의.

+0

좋아,하지만 var2가 비어 있지 않을 것으로 기대하고있다. – user1979801

+1

그렇다면'echo'와 관련된 문제는 아닙니다. 여러분이 읽으려는 코드 나 파일에 문제가 있습니다. 그것을 디버깅하려면 내 대답에 언급 한 각 에코 접두사하는 것이 좋습니다. 적어도 당신은 당신의 문제가 어디에 있는지 알게 될 것입니다. –

+0

'결과'에는 문자열 값이 있지만 var2 = <결과가 작동하지 않는 것 같습니까? 어떠한 제안? – user1979801

0

enter image description here 먼저 ... u는이 배치 파일이 같은 디렉토리에 파일 a.txt이 만들기 ... 점에서 일부 텍스트를 쓰기 참고 : Windows 2000의 윈도우 ME 윈도우 XP 윈도우 비스타 윈도우 7 지원을 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 

실행이 목욕 파일은 .. 당신은 당신이 새로 생성 된 파일 TEST.TXT에 a.txt이에있는 문자열의 첫 번째 줄의 문자열 (시작 = 5, 길이 = 3)을 찾을 수 있습니다. 마침내 그것을 작동하게했다!

+0

여전히 같은 결과 – user1979801

+0

무엇을 입력하고 있습니까? Enter id : –

+0

이미 'set var1 = % var2 % : ~ 5,3'에 의해 – user1979801

13

로랑 (Laurent)의 말처럼, ECHO의 문제는 아니며, 이는 사용자 코드의 문제입니다.

배치 파일에서 블록은 실행 전에 완전히 구문 분석됩니다.
모든 백분율 확장을 구문 분석하는 동안 블록 내에서 변수를 변경할 수없는 것처럼 보입니다.

그러나 지연된 확장이 있으므로 지연된 확장은 블록을 구문 분석하는 동안이 아니라 실행 순간에 평가됩니다.

지연 확장은 기본적으로 사용하도록 설정해야합니다.

@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 

나는 변수가 비어있는 경우에도 빈 줄을 울리는 보장합니다 여기로 구조 echo( 대신 echo을 사용했다.

0

문제 해결 방법은 if ​​블록을 완료 한 후 "echo"를 넣는 것입니다. 시험해보기 :

@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 

이렇게하면 원하는 해결책을 볼 수 있습니다. 건배! ;]

4

이 게시물이 여전히 읽혀 지더라도 확실하지는 않습니다. 다음을 시도해야합니다 : 을 코드의 상단에 바로 @echo off 후 또한 어디서나 브래킷 (같은 For-Loops 또는 If's)의 블록에 변경된 변수를 사용하려면

setlocal enabledelayedexpansion 

에 넣어야 할 당신이이 !varname!

이 도움이되어야한다 ...

인사말

012를 얻을 수 !% 변경

geisterfurz007

관련 문제