为什么我的命令行回显?
问题描述:
我写了下面的命令行。为什么我的命令行回显?
C:\Users\Administrator> echo TOMATO:50EA| (set /p z=& call set v1=APPLE:30EA %z%& for /F "tokens=1,2 delims= " %K in ('echo %v1%') do (echo Item 1: %K , Item 2: %L))
结果:
C:\Users\Administrator>(echo Item 1: APPLE:30EA , Item 2: TOMATO:50EA) Item 1: APPLE:30EA , Item 2: TOMATO:50EA
为什么它也印刷在echo
命令行?
答
命令行中的默认行为是回显以控制将要执行的命令。你可以把回声关闭或之前要隐藏与@
echo TOMATO:50EA|(set /p z=& for /F "tokens=1,2 delims= " %K in ('echo APPLE:30EA %z%') do @echo Item 1: %K , Item 2: %L)
的命令,但该代码(和你的代码)有一个故障点。它只会在z
没有任何价值时开始执行命令。
您可以尝试使用延迟扩展
echo TOMATO:50EA|cmd /q /v /c"(set /p z=& for /F "tokens=1,2" %K in ("APPLE:30EA !z!") do echo Item 1: %K , Item 2: %L)"
并且在默认配置(与延迟扩展禁用)时,那么这段代码将解决这个问题。但是,如果您在命令行中启用了延迟扩展,并且z
具有初始值,则它也会失败。
注:
在问题中的代码使用%K
写的。这意味着命令行。请记住,在批处理文件中for
可替换参数需要百分号转义(%%K
)。