2015-10-04 85 views
0

我写了下面的命令行。为什么我的命令行回显?

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命令行?

回答

0

命令行中的默认行为是回显以控制将要执行的命令。你可以把回声关闭或之前要隐藏与@

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)。

相关问题