Why this code says echo is off?

2019-03-23 09:37发布

What is wrong with this code? It says ECHO is off.

@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

Any help is appreciated.

5条回答
Lonely孤独者°
2楼-- · 2019-03-23 10:06

The solution for your problem is to put the "echo"s after the if block is completed. 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

This way you can see the solution as you wanted. Cheers! ;]

查看更多
甜甜的少女心
3楼-- · 2019-03-23 10:07

As Laurent stated, it's not a problem of the ECHO, it's a problem of your code.

In batch files, blocks are parsed complete before they are executed.
While parsing all percent expansion will be done, so it seems that your variables can't be changed inside a block.

But for this exists the delayed expansion, the delayed expansion will be evaluated in the moment of execution not while parsing the block.

It must be enabled, as per default the delayed expansion is disabled.

@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

I used here the construct echo( instead of echo as this will ensure echoing an empty line even if the variable is empty.

查看更多
ゆ 、 Hurt°
4楼-- · 2019-03-23 10:15

If your variable is empty somewhere, it will be the same as having the command "echo" on its own, which will just print the status of echo.

To avoid this, you should replace all your echo commands with something like this:

echo var2: %var2%

That way, if %var2% is empty it will just print "echo var2:" instead of "echo off".

查看更多
走好不送
5楼-- · 2019-03-23 10:19

enter image description hereFirst create a file a.txt in the same directory u have this batch file ... write some text in that...Note: only Windows 2000 Windows ME Windows XP Windows Vista Windows 7 supports 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

run this bath file .. you will find a substring(start=5,length=3) of the first line of string you have in a.txt in a newly created file test.txt. Finally got it working !

查看更多
Anthone
6楼-- · 2019-03-23 10:26

Not sure, if this post is still read, but nevertheless. You should try the following: On top of the code right after @echo off you have to put in

 setlocal enabledelayedexpansion

Additionally anywhere you want to use variables changed in a block of brackets (like For-Loops or If's) you have to change the %into ! to get !varname!

This should be helping...

Greetings

geisterfurz007

查看更多
登录 后发表回答