CMD / Batch:如何在另一组命令中使用FOR / F循环的输出

时间:2017-02-17 22:04:56

标签: http batch-file cmd sonos

一般的stackoverflow和编码新手。我能够编写一个解析文本文件的批处理,以获取网络上的sonos播放器的一组IP地址,我还能够编写一个单独的批处理,使用这些IP地址来执行HTTP命令来关闭wifi同时在所有单元上,但我必须手动输入第一批中的所有IP地址。我想知道是否有一种方法可以自动将IP地址输入到第二个批处理文件中,或者如果有一种方法可以编写单个批处理文件,它将一次完成所有操作。以下示例仅处理2个IP,现实世界我需要使用20个以上,这就是为什么我想找到一种自动输入IP的方法

非常感谢任何帮助!

第一批:GetIPlist.bat

FOR /F "tokens=3 delims= " %%a in ('findstr "IP Address: *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*" AboutMySonos.txt') DO echo %%a

返回以下IP列表:

192.168.2.174 
192.168.2.24 

第二批:SonosWifiDefeat.bat

@echo off

start "http://IpAddress:1400/wifictrl?wifi=persist-off" 
ping 1.1.1.1 -n 1 -w 1000 > nul
start "http://IpAddress:1400/wifictrl?wifi=persist-off" 

1 个答案:

答案 0 :(得分:1)

结合两个!

FOR /F "tokens=3 delims= " %%a in ('findstr "IP Address: *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*" AboutMySonos.txt') DO (
    start "http://%%a:1400/wifictrl?wifi=persist-off" 
    ping %%a -n 1 -w 1000 > nul
    start "http://%%a:1400/wifictrl?wifi=persist-off" 
)

或者,更好的是,使用Powershell,这样您就不会start打开一百个浏览器窗口:

Select-String -path .\AboutMySonos.txt -pattern "IpAddress: (.*)" | ForEach {
  ip=$_.Matches.Groups[1].Value
  Invoke-RestMethod "http://$ip:1400/wifictrl?wifi=persist-off" 
  ping $ip -n 1 -w 1000 > nul
  Invoke-RestMethod "http://$ip:1400/wifictrl?wifi=persist-off" 
}