为什么这个代码表示反响了吗?(Why this code says echo is off?)

2019-08-06 22:27发布

什么是错的代码? 它说, 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

任何帮助表示赞赏。

Answer 1:

如果变量是空的地方,这将是同为对自己的命令“回声”,这将只是打印回声的状态。

为了避免这种情况,你应该更换所有的echo与像这样的命令:

echo var2: %var2%

这样,如果%var2%是空的,将只是打印“回声VAR2:”而不是“回声关”。



Answer 2:

作为洛朗说,这不是一个问题, 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 ,因为这将确保呼应即使变量是空的空行。



Answer 3:

不知道,如果这个职位仍然是阅读,但仍然。 之后在代码的顶部:你应该尝试以下@echo off你必须把

 setlocal enabledelayedexpansion

此外任何你想用括号块更改的变量(如For-LoopsIf's ),你必须更改%! 获得!varname!

这应该帮助...

问候

geisterfurz007



Answer 4:

首先,创建在同一目录u有此批处理文件的文件a.txt中......在写一些文字...注:仅适用于Windows 2000的Windows ME Windows XP中的Windows Vista中的Windows 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

运行此文件洗澡..你会发现一个子(开始= 5,长度= 3)字符串的第一行,你必须在A.TXT在新创建的文件test.txt。 最后得到它的工作!



Answer 5:

你的问题的解决方法是把“回声” S if块完成后。 试试这个:

@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

这样,您就可以看到解决方案,你想。 干杯! ]



文章来源: Why this code says echo is off?