什么是错的代码? 它说, 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 var2: %var2%
这样,如果%var2%
是空的,将只是打印“回声VAR2:”而不是“回声关”。
作为洛朗说,这不是一个问题, 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
首先,创建在同一目录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。 最后得到它的工作!
你的问题的解决方法是把“回声” 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
这样,您就可以看到解决方案,你想。 干杯! ]