我有一個正常作業的 .bat 檔案:
set list=1 5 10 18 22 27
for %%p in (%list%) do @ping 192.168.0.%%p -w 10 -n 1 | findstr "Reply Request"
當我嘗試行內運行它時,像這樣在一行中結合&或&&
set list=1 5 10 18 22 27 && for %%p in (%list%) do @ping 192.168.0.%%p -w 10 -n 1 | findstr "Reply Request"
我收到一條錯誤訊息:
%%p was unexpected at this time.
我究竟做錯了什么?
如果組合命令在 bat 檔案中,它確實有效,但如果粘貼在命令列中,則不會。
這樣做的目的是讓 excel 生成一行復制粘貼命令以在命令提示符下運行,因為不允許在遠程系統上創建批處理檔案。
已解決: 謝謝 Magoo 和 Stephan!解決方案是包圍陣列:
set "list=1 5 10 18 22 27"
如果 %%p 則使用 %p 代替:
for %p in (%list%) do @ping 192.168.0.%p -w 10 -n 1 | findstr "Reply Request"
所以最終結果:
set "list=1 5 10 18 22 27" && for %p in (%list%) do @ping 192.168.0.%p -w 10 -n 1 | findstr "Reply Request"
確實有效:)
PS: Magoo 建議更精簡的解決方案:
for %p in (1 5 10 18 22 27) do @ping 192.168.0.%p -w 10 -n 1 | findstr "Reply Request"
簡單,單一的命令:)
uj5u.com熱心網友回復:
list決議行時的值未定義,因此批處理不替換任何內容(的“內容” list),%list%并且執行的決議結果為
set list=1 5 10 18 22 27 && for %%p in () do @ping 192.168.0.%%p -w 10...
那么,有什么問題
for %p in (1 5 10 18 22 27) do @ping 192.168.0.%p -w 10...
用于set "var=value"設定字串值 - 這可以避免尾隨空格引起的問題。不要分配終端反斜杠,Space或者"- 從元素構建路徑名 - 違反直覺,它可能會使程序更容易。
uj5u.com熱心網友回復:
要使用在同一行(或代碼塊)中定義的變數,您需要延遲擴展
默認情況下禁用延遲擴展,因此您需要啟動一個cmd啟用延遲擴展的新實體:
cmd /v:on /c "set "list=1 5 10 18 22 27" & for %p in (!list!) do @ping 192.168.0.%p -w 10 -n 1 | findstr "Reply Request""
(雖然我更喜歡 Magoo 的解決方案)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/493681.html
下一篇:如何在R中進行for回圈
