如何在 Windows 批处理文件中将 LAN ip 获取到变量

如何在 Windows 批处理文件中将 LAN ip 获取到变量

我正在将音频从 Windows 7 笔记本电脑传输到连接到路由器的声卡。我有一个用于开始传输的小批处理脚本。

REM Kill any instances of vlc 
taskkill /im vlc.exe
"c:\Program Files\VideoLAN\VLC\vlc.exe" <parameters to start http streaming>
REM Wait for vlc
TIMEOUT /T 10
REM start playback on router
plink -ssh [email protected] -pw password killall -9 madplay
plink -ssh [email protected] -pw password wget -q -O - http://192.1.159:8080/audio | madplay -Q --no-tty-control - &

如您所见,http 流是硬编码的。动态获取地址以便在其他机器上重复使用脚本会很好。有什么想法吗?

答案1

这是一个获取当前机器的 ipv4 地址的简单示例:

:: find IP address in scriptable format
:: !!Windows 7 specific at the moment!!
:: Note this only works with one adapter connected
@echo off
:: get ipv4
ipconfig | findstr IPv4 > ipadd.txt

:: For statement to find the numbers
for /F "tokens=14" %%i in (ipadd.txt) do ( 
@echo %%i 
)
del ipadd.txt /Q

这只是呼应了 IP,但您可以将其集成进去。


或者您可以尝试这个而不使用临时文件:

for /f "tokens=14" %%a in ('ipconfig ^| findstr IPv4') do set _IPaddr=%%a
echo IP is: %_IPaddr%

答案2

Windows XP 单行程序(未安装 IPv6),注意“findstr 192。” - 您可能需要删除或调整它(我用它来选择必要的接口):

for /F "tokens=2 delims=:" %%i in ('"ipconfig | findstr IP | findstr 192."') do SET LOCAL_IP=%%i

echo %LOCAL_IP%

答案3

这是输出默认网关的命令,然后是输出笔记本电脑 IP 的命令,即本地 IP。你只需看到这两个命令即可

然后使用命令将您想要的本地 IP 转储到名为 afile 的文件中。

然后,将文件转储到名为

您可以从 gnuwin32 下载 grep

C:\>ipconfig | grep -E -i "def" | grep -E -o "[0-9][0-9.]+"  
192.168.1.254

C:\>ipconfig | grep -E -i "IP Address" | grep -E -o "[0-9][0-9.]+"  
192.168.1.67

C:\>ipconfig | grep -E -i "IP Address" | grep -E -o "[0-9][0-9.]+" > afile

C:\>for /f %f in ('type afile') do set a=%f

C:\>set a=192.168.1.67   <-- that got executed automatically

C:\>echo %a%
192.168.1.67

C:\>

因此,您的 bat 文件可以是 dothis.bat,它将包含这两行,当然您可以修改文件的名称 (afile) 和环境变量 (a)。请注意,在 bat 文件中,您使用 %%f(或任何字母)而不是 %f

ipconfig | grep -E -i "IP Address" | grep -E -o "[0-9][0-9.]+" > afile  
for /f %%f in ('type afile') do set a=%%f  

一个更简洁的替代第二行 bat 文件是

for /f %%f in (afile) do set a=%%f

答案4

回答了我自己的问题...

for /f "tokens=3" %%i in ('ping %computername% -4 -n 1 ^| findstr Reply') do (
    set localipwc=%%i
)

for /f "tokens=1 delims=:" %%j in ("%localipwc%") do (
    set localip=%%j
)

echo "%localip%"

这里有一个更好的...请注意,ping 命令中的 -4 在 Win7 上强制使用 IPv4,而在 XP 上会被忽略...(变量名中的 :~11 从 var 中的第 11 个字符开始扩展)

@echo off
cls
for /f "tokens=1 delims=:" %%j in ('ping %computername% -4 -n 1 ^| findstr Reply') do (
    set localip=%%j
)
echo Your local IP is:"%localip:~11%"

示例输出:

您的本地 IP 是:“192.168.220.133”

相关内容