这段代码有什么问题? 它说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
任何帮助表示赞赏。
如果你的变量在某个地方是空的,它将和自己的命令“echo”一样,只是打印回显的状态。
为了避免这种情况,你应该用这样的东西替换所有的echo
命令:
echo var2: %var2%
这样,如果%var2%
为空,它将只打印“echo var2:”而不是“echo off”。
正如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
因为这将确保回应一个空行,即使变量是空的。
不知道,如果这个职位仍然阅读,但不过。 您应该尝试以下操作:在@echo off
之后的代码之上,您必须输入
setlocal enabledelayedexpansion
另外,如果你想要使用变量的变量(如For-Loops
或If's
),你必须把%
变成!
得到!varname!
这应该是帮助…
问候
geisterfurz007
首先在同一个目录中创建一个文件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)的字符串的第一行你有一个新创建的文件test.txt。 终于搞定了!
你的问题的解决方案是在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
这样你可以看到你想要的解决方案。 干杯! ]