Windows CMD中for循环ping IP段后如何完整保存结果到文本文件
问题原因
你原来的代码使用了覆盖重定向符>,每次循环执行时都会清空目标文件原有内容再写入当前单次执行结果,最终只会保留最后一次循环的输出。
单行解决方案
方案1:使用追加重定向
如果允许保留文件原有内容追加写入,直接将>替换为追加重定向符>>即可:
for /l %i in (1,1,64) do @ping 10.39.63.%i -w 1500 -n 1 | find "Reply" >>C:\Users\brymed\Desktop\test.txt
如果需要每次执行都清空旧内容写入新结果,在前面加清空文件的命令即可:
type nul >C:\Users\brymed\Desktop\test.txt && for /l %i in (1,1,64) do @ping 10.39.63.%i -w 1500 -n 1 | find "Reply" >>C:\Users\brymed\Desktop\test.txt
方案2:整体重定向(更高效)
将整个for循环用括号包裹,统一将所有循环的输出重定向到文件,无需每次循环操作文件,性能更好,默认覆盖写入旧内容:
(for /l %i in (1,1,64) do @ping 10.39.63.%i -w 1500 -n 1 | find "Reply") >C:\Users\brymed\Desktop\test.txt
其他补充建议
- 如果要将上述代码保存为
.bat/.cmd批处理文件运行,需要把循环变量%i改为%%i,否则批处理会识别失败。 - 如果需要同时在命令行窗口显示结果并写入文件,可以调用PowerShell的Tee-Object实现:
(for /l %i in (1,1,64) do @ping 10.39.63.%i -w 1500 -n 1 | find "Reply") | powershell -c "$input | Tee-Object -FilePath C:\Users\brymed\Desktop\test.txt"
内容的提问来源于stack exchange,提问作者Bryan Medina
相关产品推荐
相关产品推荐

