windows - Oprettelse af en batchfil for at identificere den aktive internetforbindelse

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at skrive en batch-fil, som gør det muligt for en bruger at vælge deres aktive internetforbindelse, hvis der er mere end en fra en liste genereret af netsh-kommandoen og derefter ændre DNS-indstillingerne.


Men jeg kan ikke finde ud af, hvordan man bruger valgkommandoen, når antallet af muligheder er kendt, indtil scriptet udføres. Uden brug af arrayer har jeg forsøgt at oprette en strengvariabel 'valg' for at holde snoren, der repræsenterer det numeriske valg og videregive det til kommandoen til valg, men jeg kan ikke få det til at fungere. Jeg kan ikke hjælpe med at føle, at der skal være en meget nemmere måde at gøre dette på, men min forskning viser mig ikke. Enhver hjælp ville blive modtaget taknemmeligt.


@echo off
setlocal
Set active=0
Set choices=1
set ConnnectedNet=
FOR /F "tokens=2,3* " \%\%j in ('netsh interface show interface ^| find "Connected"') do Set /A active+=1
FOR /L \%\%G IN (2,1,\%active\%) do (set choices=\%choices\%\%\%G)
if \%active\% lss 2 goto :single
if \%active\% gtr 1 goto :multiple
:single
FOR /F "tokens=2,3* " \%\%j in ('netsh interface show interface ^| find "Connected"') do set ConnnectedNet=\%\%l
netsh interface IPv4 set dnsserver "\%ConnnectedNet\%" static 0.0.0.0 both
goto :eof
:multiple
echo You have more than one active interface. Please select the interface which you are using to connect to the Internet
FOR /F "tokens=2,3* " \%\%j in ('netsh interface show interface ^| find "Connected"') do echo \%\%l
CHOICE /C:\%choices\% /N /T:1,10

Bedste reference


Problemet er ikke ved valgkommandoen, bygningen af ​​valgstrengen fejler.

Nogle gange ville en simpel echo on hjælpe.


set choices=1
...
FOR /L \%\%G IN (2,1,\%active\%) do (set choices=\%choices\%\%\%G)


Dette mislykkes, fordi set choices=\%choices\% kun udvides en gang før starter søjlen, så du har set choices=1\%\%G.


I stedet kan du bruge forsinket ekspansion


setlocal EnableDelayedExpansion  
FOR /L \%\%G IN (2,1,\%active\%) do (set choices=!choices!\%\%G)


eller dobbelt-/opkaldsudvidelse


FOR /L \%\%G IN (2,1,\%active\%) do (call set choices=\%\%choices\%\%\%\%G)


Den forsinkede ekspansion er (delvist) forklaret med set /?