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

CMD/Batch: How to use the output of a FOR /F loop in another set of commands

Whosebug 和一般编码的新手。我能够编写一个批处理来解析网络上 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

其中 returns 以下 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" 

结合两者!

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 打开一百个浏览器 windows:

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" 
}