为什么我的命令行会回显?

时间:2015-10-04 06:04:03

标签: windows cmd

我写了以下命令行。

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

1 个答案:

答案 0 :(得分: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)。