22

I have the following script:

FOR %%i IN (1 2 3) DO (     
    IF %%i==1 ( 
       ECHO %%i 
    )
    IF %%i==2 ( 
       ECHO %%i 
    )
    IF %%i==3 ( 
       ECHO %%i 
    )
)

I just wanted to print

1
2
3

because I will be using the same logic again to write a more complete task ... I'm not a Windows guy, and I have no idea how to do it in batch. Instead I'm getting:

c:\>FOR %i IN (1 2 3) DO (
IF %i == 1 (ECHO %i  )
 IF %i == 2 (ECHO %i  )
 IF %i == 3 (ECHO %i  )
)

c:\>(
IF 1 == 1 (ECHO 1  )
 IF 1 == 2 (ECHO 1  )
 IF 1 == 3 (ECHO 1  )
)
1

c:\>(
IF 2 == 1 (ECHO 2  )
 IF 2 == 2 (ECHO 2  )
 IF 2 == 3 (ECHO 2  )
)
2

c:\>(
IF 3 == 1 (ECHO 3  )
 IF 3 == 2 (ECHO 3  )
 IF 3 == 3 (ECHO 3  )
)
3
indiv
  • 17,306
  • 6
  • 61
  • 82
cybertextron
  • 10,547
  • 28
  • 104
  • 208

1 Answers1

49

To avoid echoing the Windows commands in a batch file, use @echo off:

@ECHO OFF
FOR %%i IN (1 2 3) DO (     
    IF %%i==1 ( 
       ECHO %%i 
    )
    IF %%i==2 ( 
       ECHO %%i 
    )
    IF %%i==3 ( 
       ECHO %%i 
    )
)

Note the preceding @ in echo off prevents echo off from echoing. If you don't have the @ then you'll see echo off echoed to the terminal but then echoing will be off after that point. A batch file command which is preceded by @ is not echoed. So @ can be used to prevent echoing of individual commands.

Martin Prikryl
  • 188,800
  • 56
  • 490
  • 992
lurker
  • 56,987
  • 9
  • 69
  • 103