use*_*801 27 windows cmd batch-file
这段代码有什么问题?它说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
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
lau*_*ent 39
如果你的变量在某处是空的,那么它将与自己的命令"echo"相同,这将只显示echo的状态.
为避免这种情况,您应该使用以下内容替换所有echo
命令:
echo var2: %var2%
Run Code Online (Sandbox Code Playgroud)
这样,如果%var2%
是空的,它将只打印"echo var2:"而不是"echo off".
jeb*_*jeb 21
正如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
Run Code Online (Sandbox Code Playgroud)
我在这里使用了构造echo(
而不是echo
因为这将确保即使变量为空也会回显空行.
不确定,如果这篇文章仍在阅读,但仍然如此.您应该尝试以下操作:在@echo off
您必须放入之后立即执行代码
setlocal enabledelayedexpansion
Run Code Online (Sandbox Code Playgroud)
此外,您想要在括号块(例如For-Loops
或If's
)中更改变量的任何地方,您必须将%
into 更改为!
get
!varname!
这应该有帮助......
问候
geisterfurz007
归档时间: |
|
查看次数: |
75800 次 |
最近记录: |