以下命令在Windows Vista及更早版本上無法正確運行。它在Windows 7及更高版本上運行良好。如果在帶有FOR變量的BATCH/CMD FOR循環中無效(例如,%p)
BATCH示例(名爲whateveryouwanttocallit.cmd
或somescript.bat
(擴展沒有在這種情況下重要)):
for /f "tokens=*" %%p in ('ping -n 1 127.0.0.1') do if not "%%p"=="" echo %%p
上面的腳本試圖只顯示非空行。
在Windows 7的機器,會生成以下(正確)輸出:
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Ping statistics for 127.0.0.1:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
在Windows Vista和更早版本相同的腳本將產生不正確的輸出:
ECHO is on.
Pinging 127.0.0.1 with 32 bytes of data:
ECHO is on.
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
ECHO is on.
Ping statistics for 127.0.0.1:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
它看起來像前面系統有額外的換行。 早期系統有不同的輸出格式嗎?有沒有辦法以一種適用於早期和後期系統的方式完成此任務?解決方案越簡單越好。
在批處理文件訪問令牌,當你需要雙''%...->使用'%% p' – npocmaka
你也應該使用'」 delims =「'解析整行。 – foxidrive
@npocmaka我的錯誤,我應該澄清一點。該問題仍然存在於cmd和批處理腳本中 – Lectrode