별도의 ISP에서 제공하는 2개의 이더넷 케이블이 있습니다. 어떤 케이블이 연결되어 있는지 알아낸 다음 그에 따라 이더넷 설정을 변경하는 CMD(.bat) 스크립트를 만들고 싶습니다.
설정을 변경하는 스크립트 부분이 있습니다. 케이블을 어떻게 식별할 수 있나요?
:CHANGE-ISP-1
netsh interface ipv4 set address name="Ethernet 2" static 108.129.156.199 255.255.255.0 108.129.156.1 store=persistent
netsh interface ipv4 set dnsservers name="Ethernet 2" source=static address="108.129.159.31" validate=no
netsh interface ipv4 add dnsservers name="Ethernet 2" address="108.129.159.33" validate=no index=2
:CHANGE-ISP-2
netsh interface ipv4 set address name="Ethernet 2" source=dhcp
netsh interface ipv4 set dnsservers name="Ethernet 2" source=dhcp
답변1
1) 각 ISP에 대해 예측 가능한 설정이 있습니다.
2) 각 ISP 설정에 2개의 라벨을 사용할 필요가 없습니다.
삼) 바꾸다find /i ... errorlevel
에게findstr && || (operators)
4) 라벨을 다음으로 교체하세요.if...() else ()...
@echo off && setlocal enabledelayedexpansion
cls & echo/ & for %%i in (1,2
)do "%__APPDIR__%ping.exe" -n 1 dns.ser.ver.%%~i|%__APPDIR__%findstr.exe "TTL=" >nul && (
echo/ DNS ISP-%%~i ping/link status: UP^^!! && set "_isp_srv=%%~i" && goto :_change-isp_:
)|| echo/ DNS ISP-%%i ping/link status: DOWN^^!! & if "%%~i" == "2" endlocal && goto :EOF
:_change-isp_:
set "_cmd_netsh=%__APPDIR__%netsh.exe interface ipv4" && if not "!_isp_srv!" == "1" (
!_cmd_netsh! set address name="Ethernet 2" source=dhcp && !_cmd_netsh! set dnsservers name="Ethernet 2" source=dhcp
) else (!_cmd_netsh! set address name="Ethernet 2" static 108.129.156.199 255.255.255.0 108.129.156.1 store=persistent
!_cmd_netsh! set dnsservers name="Ethernet 2" source=static address="108.129.159.31" validate=no
!_cmd_netsh! add dnsservers name="Ethernet 2" address="108.129.159.33" validate=no index=2 )
rem./ do more tasks here, after that add "endlocal" at the end: ===^> && endlocal && goto :EOF
이것이 당신에게 도움이 되도록실명/IP, 실제 이름/IP를 처리하려면 일부 줄에 대한 일부 조정이 필요합니다.DNS.SER.VER.1 및 DNS.SER.VER.2.
cls & echo/ & for %%i(1,2 //> 1,2를 실명이나 IP로 바꿉니다.
) "%__APPDIR__%ping.exe" -n 1dns.ser.ver.%%~i //> dns.ser.ver 루프에서 변수만 사용하려면 교체하세요.%%나
"_cmd_netsh=%__APPDIR__%netsh.exe 인터페이스 ipv4"를 설정하고 "!_isp_srv!"가 아닌 경우 && =="1"( //> "1"을 DNS.SER.VER.1의 실제 이름으로 바꿉니다.
)|| 에코/DNSISP-%%i //> %%i 루프의 var로 교체
& "%%~i" ==인 경우"2" //> DNS.SER.VER.2의 실제 이름으로 바꿉니다.
- 동일한 코드"기존 형식"
@echo off && setlocal enabledelayedexpansion
cls
echo/
for %%i in (1,2) do (
"%__APPDIR__%ping.exe" -n 1 dns.ser.ver.%%~i|%__APPDIR__%findstr.exe "TTL=" >nul && (
echo/ DNS ISP-%%~i ping/link status: UP^^!!
set "_isp_srv=%%~i"
goto :_change-isp_:
) || (
echo/ DNS ISP-%%i ping/link status: DOWN^^!!
if "%%~i" == "2" endlocal && goto :EOF
)
)
:_change-isp_:
set "_cmd_netsh=%__APPDIR__%netsh.exe interface ipv4"
if not "!_isp_srv!" == "1" (
!_cmd_netsh! set address name="Ethernet 2" source=dhcp
!_cmd_netsh! set dnsservers name="Ethernet 2" source=dhcp
) else (
!_cmd_netsh! set address name="Ethernet 2" static 108.129.156.199
255.255.255.0 108.129.156.1 store=persistent
!_cmd_netsh! set dnsservers name="Ethernet 2" source=static
address="108.129.159.31" validate=no
!_cmd_netsh! add dnsservers name="Ethernet 2" address="108.129.159.33" validate=no index=2
)
rem./ do more tasks here, after that add "endlocal" at the end: ===^> && endlocal && goto :EOF
이 질문은 실제 케이블 설정을 현재 ISP에서 다른 ISP로 변경하고 싶다는 것을 의미합니다.
따라서 다음과 같이 더 간단한 코드를 사용하여 이 작업을 수행할 수도 있습니다. 예, 어쩌면 그렇게 간단하지 않을 수도 있습니다.
@echo off && setlocal enabledelayedexpansion && cls & echo/
pushd %__APPDIR__% & set "_cmd_netsh=netsh.exe interface ipv4" && ping.exe -n 1 108.129.156.1|findstr "TTL=">nul && (
!_cmd_netsh! set address name="Ethernet 2" source=dhcp && !_cmd_netsh! set dnsservers name="Ethernet 2" source=dhcp
)||( !_cmd_netsh! set address name="Ethernet 2" static 108.129.156.199 255.255.255.0 108.129.156.1 store=persistent
!_cmd_netsh! set dnsservers name="Ethernet 2" source=static address="108.129.159.31" validate=no
!_cmd_netsh! add dnsservers name="Ethernet 2" address="108.129.159.33" validate=no index=2 )
podp & endlocal && goto :EOF
미안 내 한계영어
답변2
다음은 Crude Hacks 'R Us에서 제공한 확인 방법을 설명하는 일부 의사코드입니다.
ping DNS.SER.VER.1 | find /I "TTL"
if not errorlevel 1 echo DNS ISP-1 UP
if not errorlevel 1 GOTO CHANGE-ISP-1
ping DNS.SER.VER.2 | find /I "TTL"
if not errorlevel 1 echo DNS ISP-2 UP
if not errorlevel 1 GOTO CHANGE-ISP-2
echo BOTH ISP CONNECTIONS FAIL
DNS.SER.VER.1 및 DNS.SER.VER.2를 실제 DNS 서버 IP 주소로 대체하십시오.
첫 번째 핑에서 ISP-1 DNS 서버를 찾지 못하면 FIND는 오류 수준 1을 시작합니다.
찾으면 오류 수준은 0이므로 에코 DNS SERVER ISP-1 UP을 얻은
다음 스크립트에서 CHANGE-ISP로 이동합니다. -1
ISP-1 DNS 서버에 대한 ping이 실패하면 스크립트는 ping DNS.SER.VER.2 | find /I "TTL"
ISP-2를 찾으면 Errorlevel은 0이고 DNS SERVER ISP-2 UP이 표시
되면 스크립트는 CHANGE-ISP-2로 이동합니다.
이 시점에서 CHANGE-ISP-1 또는 CHANGE-ISP-2로 리디렉션되지 않은 경우 두 ISP 연결 실패가 표시되며 관리자에게 원하는 모든 경고를 수행할 수 있습니다.