2015-10-04 118 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)。

相關問題