我写了以下命令行。
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 :(得分: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
)。