这段代码有什么问题?它说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
感谢任何帮助。
答案 0 :(得分:35)
如果你的变量在某个地方是空的,它将与单独使用命令“echo”相同,这将只显示echo的状态。
为避免这种情况,您应该用以下内容替换所有echo
命令:
echo var2: %var2%
这样,如果%var2%
为空,它只会打印“echo var2:”而不是“echo off”。
答案 1 :(得分:20)
正如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
,因为这样可以确保即使变量为空也会回显空行。
答案 2 :(得分:6)
不确定,如果这篇文章仍然被阅读,但仍然如此。
您应该尝试以下方法:
在@echo off
之后的代码之上,你必须放入
setlocal enabledelayedexpansion
此外,您想要在括号中更改变量的任何地方(例如For-Loops
或If's
),您必须将%
更改为!
才能获得
!varname!
这应该有帮助...
问候
geisterfurz007
答案 3 :(得分:0)
首先在同一个目录中创建一个文件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
运行此浴文件..您将在新创建的文件test.txt中找到a.txt中第一行字符串的子字符串(start = 5,length = 3)。终于搞定了!
答案 4 :(得分: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
通过这种方式,您可以根据需要查看解决方案。 干杯! ;]