Cara mendapatkan LAN ip ke variabel dalam file batch Windows


5

Saya mengalirkan audio dari laptop Windows 7 ke kartu suara yang terpasang pada router. Saya punya skrip batch kecil untuk mulai streaming.

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 me@192.168.1.1 -pw password killall -9 madplay
plink -ssh me@192.168.1.1 -pw password wget -q -O - http://192.1.159:8080/audio | madplay -Q --no-tty-control - &

Seperti yang Anda lihat aliran http adalah kode keras. Akan menyenangkan untuk mendapatkan alamat secara dinamis untuk menggunakan kembali skrip di komputer lain. Ada ide?


Itu Alamat LAN? Hati-hati dengan itu.
grawity

Juga, saran: gunakan nama host alih-alih alamat. Windows mengirimkan nama hostnya dalam permintaan DHCP, jadi jika router Anda melakukan DHCP dan DNS, tautkan. Kalau tidak, ada NetBIOS ( smbclient + nss_wins ) dan Apple Bonjour ( avahi + nss_mdns ). (Saya juga bisa menyarankan LLMNR, tapi saya tidak yakin apakah ada resolver Linux untuk itu.) Ini akan menghapus kebutuhan untuk menentukan alamat di router.
grawity

@grawity: Bisakah Anda menguraikan? Saya melakukan ini pada dasarnya tanpa pengetahuan tentang jaringan. Dapatkah saya meminta alamat ip lan (?) Yang diberikan oleh router? Pinging // & lt; MY-laptop-hostname & gt; / tidak berfungsi.
Ville Koskinen

@ Ville: Dan saya melakukan ini tanpa sepengetahuan mengapa Anda perlu "meneruskan IP LAN laptop ke router" dan bagaimana tepatnya Anda melakukannya. : /
grawity

@ kegembiraan: Oke, saya sudah mengedit pertanyaan.
Ville Koskinen

Jawaban:


2

Berikut adalah contoh sederhana yang akan mendapatkan alamat ipv4 dari mesin saat ini:

:: 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

Ini hanya menyuarakan IP tetapi Anda dapat mengintegrasikannya.


Atau Anda dapat mencoba ini dan tidak menggunakan file sementara:

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

menarik, tetapi ketika saya mencoba ipconfig | findstr IPv4 tidak menemukan apa pun. Apakah itu tipe yang menurut Anda dikenali findstr? Berikut dokumentasi untuk findstr technet.microsoft.com/en-us/library/bb490907.aspx tahu di mana dikatakan tentang IPv4 menjadi parameter yang dikenali? Semua findstr IPv4 tidak mencari string .. jadi, apakah versi windows Anda menggunakan IPv4 istilah dalam output ipconfig? xp tidak.
barlop

Saya menulis skrip pada Windows 7, saya tidak punya kotak XP untuk mencobanya. findstr hanya mengambil garis dengan string IPv4 di atasnya yang diteruskan oleh pipa (seluruh output ipconfig). Anda harus dapat mengadaptasinya untuk mengambil jalur apa pun dari garis alamat IPv4 di XP. Jika saya mendapatkan baik untuk menjalankan VM atau menukar SSD saya akan mencobanya di XP.
Dan M.

Terima kasih Dan M, ini tidak memerlukan program tambahan dan berfungsi pada versi Windows 7 lokal saya.
Ville Koskinen

4

Windows XP one-liner (tidak ada IPv6 terpasang), perhatikan "findstr 192." - Anda mungkin perlu menghapus penyesuaian (saya menggunakannya untuk memilih antarmuka yang diperlukan):

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

echo %LOCAL_IP%

2

Berikut adalah perintah untuk menampilkan gateway default, lalu perintah untuk menampilkan IP laptop, IP lokal. Supaya Anda melihat 2 perintah itu

Kemudian perintah untuk membuang IP lokal, yang Anda inginkan, ke file bernama afile.

Kemudian perintah untuk membuang file ke variabel lingkungan yang disebut a

Anda dapat mengunduh grep dari gnuwin32

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:\>

Jadi file bat Anda bisa menjadi dothis.bat dan akan memiliki 2 baris ini dan tentu saja Anda dapat mengubah nama file (afile) dan variabel lingkungan (a). catat dalam file bat yang Anda gunakan %% f (atau surat apa pun) alih-alih% 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  

baris kedua alternatif yang lebih rapi untuk file bat 2 baris akan

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

Output dari ipconfig di Windows 7 tampaknya berbeda. Anda dapat beradaptasi di mana dikatakan "Alamat IP" ke "IPv4" atau string lain yang unik untuk baris yang ingin Anda ambil dari output ipconfig.
barlop

2

jawab pertanyaanku sendiri ...

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

Inilah yang lebih baik ... perhatikan bahwa -4 dalam perintah ping memaksa IPv4 pada Win7 dan diabaikan pada XP ... (the: ~ 11 dalam nama variabel meluas mulai dari 11 karakter di var)

@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%"

Output sampel:

IP lokal Anda adalah: "192.168.220.133"


Ini adalah yang terbaik karena mendukung beberapa alamat IP
Anton K

1

Windows 7 one-liner:

for /F "tokens=14" %i in ('"ipconfig | findstr IPv4"') do SET LOCAL_IP=%i

0

Berdasarkan jawaban sebelumnya, dan mencatat bahwa yang kedua tidak akan berfungsi jika Anda memiliki IP lokal tidak mulai dari 192, kami mendapatkan:

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

dan jika kita ingin meletakkannya di file batch:

@for /F "tokens=2 delims=:" %%i in ('"ipconfig | findstr IPv4"') do set LOCAL_IP=%%i
@echo Detected: Local IP = [%LOCAL_IP%]

(Contoh hasil: Terdeteksi: IP Lokal = [10.67.1.205])

tetapi jika kita membutuhkan variabel TIDAK mengandung spasi sebelumnya, maka kita perlu (win7, jika ada masalah dengan 13 ...):

@for /F "tokens=13 delims=\  " %%i in ('"ipconfig | findstr IPv4"') do set LOCAL_IP=%%i
@echo Detected: Local IP = [%LOCAL_IP%]

(Contoh hasil: Terdeteksi: IP Lokal = [10.67.1.205])


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

Berfungsi pada Windows 7 dan Windows XP.


2
Silakan mulai pertanyaan baru untuk Anda does anyone else know how to get rid of the trailing :? pertanyaan alih-alih menggabungkannya dengan jawaban.
jonsca

-1
@echo off
net use J: /d /y
rem Aqui se colocan manualmente ip
set matriz=172.25.103.*
set uno=172.25.20.*
set sur=172.25.18.*
set alamor=172.25.4.*
set autobanco=172.25.19.*
set cariamanga=172.25.7.*
set catacocha=172.25.3.*
set catamayo=172.25.2.*
set pangui=172.25.44.*
set macara=172.25.5.*
set hipervalle=172.25.35.*
set gualaquiza=172.25.21.*
set quito=172.25.10.*
set yanzatza=172.25.9.*
set zamora=172.25.8.*
set recreo=172.25.38.*
set machala=172.25.103.196
rem Estas dos líneas extraen el ip real del equipo a una variable
for /f "tokens=1,2* delims=:" %%i in (' ipconfig ^| find "IPv4" ') do set ip=%%j
set ip=%ip:~1%
echo %ip%
pause
rem Compara la dirección IP si esta ok va a Formas Agencias sino sale a ERROR1
if /I "%matriz%=="%ip%" goto matriz1 else
if /I "%uno%"=="%ip%" goto uno1 else
if /I "%sur%"=="%ip%" goto sur1 else
if /I "%alamor%"=="%ip%" goto alamor1 else
if /I "%autobanco%"=="%ip%" goto autobanco1 else
if /I "%cariamanga%"=="%ip%" goto cariamanga1 else
if /I "%catacocha%"=="%ip%" goto catacocha1 else
if /I "%catamayo%"=="%ip%" goto catamayo1 else
if /I "%pangui%"=="%ip%" goto pangui1 else
if /I "%macara%"=="%ip%" goto macara1 else
if /I "%hipervalle%"=="%ip%" goto hipervalle1 else
if /I "%gualaquiza%"=="%ip%" goto gualaquiza1 else
if /I "%quito%"=="%ip%" goto quito1 else
if /I "%yanzatza%"=="%ip%" goto yanzatza1 else
if /I "%zamora%"=="%ip%" goto zamora1 else
if /I "%recreo%"=="%ip%" goto recreo1 else
if /I "%machala%"=="%ip%" goto machala1 else goto error1
rem Mapeo de Unidad de red hacia Matriz
:matriz1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Agencia Uno
:uno1
IF EXIST S:\fgen1001.fmx goto fin
net use S: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Agencia Sur
:sur1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Alamor
:alamor1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Autobanco
:autobanco1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Cariamanga
:cariamanga1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Catacocha
:catacocha1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Catamayo
:catamayo1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Pangui
:pangui1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Macara
:macara1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Hipervalle
:hipervalle1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Gualaquiza
:gualaquiza1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Quito
:quito1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Yanzatza
:yanzatza1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Zamora
:zamora1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Recreo
:recreo1
IF EXIST J:\fgen1001.fmx goto fin
net use J: \\172.25.0.35\Forms
exit
rem Mapeo de Unidad de red hacia Machala
:machala1
IF EXIST M:\fgen1001.fmx goto fin
net use M: \\172.25.0.35\Forms
exit
:error1
echo IP INCORRECTA
pause
exit
:fin
exit

1
Bisakah Anda jelaskan apa yang dilakukannya? Tampaknya sangat disesuaikan dengan lingkungan tertentu, dengan banyak alamat IP yang dikodekan. Bagaimana orang lain mengadaptasi ini ke situs mereka? Tolong jangan menanggapi dalam komentar; sunting jawaban Anda untuk membuatnya lebih jelas dan lebih lengkap - dan gunakan bahasa Inggris.
Scott

Jawabannya terkubur di suatu tempat dalam file batch yang panjang dan rumit ini. Harap berikan jawaban minimal dengan penjelasan dalam bahasa Inggris.
DavidPostill
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.