Skript pro přepnutí Public/Private wifi

Amigo Ventero 10 Reputační body
2026-02-12T15:49:58.15+00:00

Nechal jsem si na ChatGPT udělat skript a po nějakém doladění jsem se dostal k funkčnímu přepínači, akorát, že po stisknutí klávesy po oznámení ERRORLEVEL se už neprovede kontrola a výpis konečného stavu:

@echo off
setlocal
set "IFNAME=Wi-Fi"
echo IFNAME="%IFNAME%"
echo Overeni adapteru...
powershell -NoProfile -Command "if(-not (Get-NetAdapter -Name '%IFNAME%' -ErrorAction SilentlyContinue)) { Write-Output '>>PS: NOADAPTER' ; exit 2 } ; if((Get-NetAdapter -Name '%IFNAME%').Status -ne 'Up') { Write-Output '>>PS: NOTUP' ; exit 3 } ; Write-Output '>>PS: ADAPTER_OK'; exit 0"
echo ERRORLEVEL=%ERRORLEVEL%
echo Ziskavam aktualni kategorii...
for /f "usebackq delims=" %%C in (`powershell -NoProfile -Command "Try { $p = Get-NetConnectionProfile -InterfaceAlias '%IFNAME%' -ErrorAction SilentlyContinue; if(-not $p){ Write-Output '' ; exit 3 } ; Write-Output $p.NetworkCategory ; exit 0 } Catch { exit 1 }"`) do set "CUR_CAT=%%C"
echo CUR_CAT="%CUR_CAT%"
if "%CUR_CAT%"=="" (
  echo Neexistujici nebo prazdny connection profile pro "%IFNAME%".
  pause
  exit /b 1
)
if /i "%CUR_CAT%"=="Private" (
  set "NEW_CAT=Public"
) else (
  set "NEW_CAT=Private"
)
echo Nastavuji "%IFNAME%" z "%CUR_CAT%" na "%NEW_CAT%"...
powershell -NoProfile -Command "Try { Set-NetConnectionProfile -InterfaceAlias '%IFNAME%' -NetworkCategory %NEW_CAT% ; Write-Output '>>PS: SET_OK' ; exit 0 } Catch { Write-Output ('>>PS: SET_ERR ' + $_.Exception.Message) ; exit 1 }"
echo Po nastavovani: ERRORLEVEL=%ERRORLEVEL%
pause
if %ERRORLEVEL% EQU 0 (
  echo Hotovo: "%IFNAME%" zmeneno z "%CUR_CAT%" na "%NEW_CAT%".
) else (
  echo Chyba pri nastavovani. Spustte PowerShell (Admin) a overte: Get-NetAdapter ; Get-NetConnectionProfile
)
echo KONEC. Okno zustane otevrene.
pause
endlocal

Toto už nedělá nic - okno se po stisku klávesy ukončí a žádný výpis:

if %ERRORLEVEL% EQU 0 (   echo Hotovo: "%IFNAME%" zmeneno z "%CUR_CAT%" na "%NEW_CAT%". ) else (   echo Chyba pri nastavovani. Spustte PowerShell (Admin) a overte: Get-NetAdapter ; Get-NetConnectionProfile )  echo KONEC. Okno zustane otevrene.
pause
endlocal

Další varianta se stejným výsledkem:

~~
powershell -NoProfile -Command "Try { Set-NetConnectionProfile -InterfaceAlias '%IFNAME%' -NetworkCategory %NEW_CAT% ; Write-Output '>>PS: SET_OK' ; exit 0 } Catch { Write-Output ('>>PS: SET_ERR ' + $_.Exception.Message) ; exit 1 }" set "PSRC=%ERRORLEVEL%" echo Po nastavovani: ERRORLEVEL=%PSRC% pause
if "%PSRC%"=="0" ( echo Hotovo: "%IFNAME%" zmeneno z "%CUR_CAT%" na "%NEW_CAT%". ) else ( echo Chyba pri nastavovani. Spustte PowerShell (Admin) a overte: Get-NetAdapter ; Get-NetConnectionProfile )
echo KONEC. Okno zustane otevrene.
pause
endlocal

Nebo jiná varianta, taktéž se stejným výsledkem:

~~
powershell -NoProfile -Command "Set-NetConnectionProfile -InterfaceAlias '%IFNAME%' -NetworkCategory %NEW_CAT%"
set "PSRC=%ERRORLEVEL%"
if "%PSRC%"=="0" (
echo Hotovo: "%IFNAME%" zmeneno z "%CUR_CAT%" na "%NEW_CAT%".
) else (
echo Chyba pri nastavovani. Spustte PowerShell (Admin) a overte: Get-NetAdapter ; Get-NetConnectionProfile
)
echo KONEC. Okno zustane otevrene.
pause
endlocal

Prosím o revizi, příp. optimalizaci a radu, jak udělat tu kontrolu s příslušným výpisem.

Jinak nemělo by být endlocal před pause?

Windows pro domácnosti | Windows 11 | Internet a připojení

Odpověď doporučená moderátorem
Amigo Ventero 10 Reputační body
2026-02-17T09:42:55.3+00:00

Funkční skript vypadá takto, ale zaboha nemůžu do messageboxu dostat češtinu. Když to spustím samostatně v cmd jen ten příkaz, tak korektně, ale jakmile to spustím ve skriptu .cmd, tak jsou tam nesmyslné znaky:

@echo off
setlocal
rem Rucni nastaveni:
rem set IFNAME=Wi-Fi
rem echo IFNAME="%IFNAME%"
rem Zjisteni a nastaveni dle MediaType:
rem for /f "usebackq delims=" %%A in (`powershell -NoProfile -Command "Get-NetAdapter | Where-Object {($_.MediaType -eq 'Native 802.11' -or $_.MediaType -eq '802.3') -and $_.Status -eq 'Up'} | Select-Object -ExpandProperty Name | Select-Object -First 1"`) do set IFNAME=%%A
rem Zjisteni a nastaveni dle nazvu:
for /f "usebackq delims=" %%A in (`powershell -NoProfile -Command "Get-NetAdapter | Where-Object {($_.Name -like '*Wi-Fi*' -or $_.Name -like '*Ethernet*') -and $_.Status -eq 'Up'} | Select-Object -ExpandProperty Name | Select-Object -First 1"`) do set IFNAME=%%A
if %IFNAME%=="" (
    echo Nebyl nalezen aktivni WiFi nebo Ethernet adapter
    goto :ERR
)
echo Nalezen aktivni sitovy adapter "%IFNAME%"
echo Overeni adapteru...
powershell -NoProfile -Command "if(-not (Get-NetAdapter -Name '%IFNAME%' -ErrorAction SilentlyContinue)) { Write-Output '>>PS: NOADAPTER' ; exit 2 } ; if((Get-NetAdapter -Name '%IFNAME%').Status -ne 'Up') { Write-Output '>>PS: NOTUP' ; exit 3 } ; Write-Output '>>PS: ADAPTER_OK'; exit 0"
echo ERRORLEVEL=%ERRORLEVEL%
echo Ziskavam aktualni kategorii...
for /f "usebackq delims=" %%C in (`powershell -NoProfile -Command "Try { $p = Get-NetConnectionProfile -InterfaceAlias '%IFNAME%' -ErrorAction SilentlyContinue; if(-not $p){ Write-Output '' ; exit 3 } ; Write-Output $p.NetworkCategory ; exit 0 } Catch { exit 1 }"`) do set CUR_CAT=%%C
echo CUR_CAT="%CUR_CAT%"
if %CUR_CAT%=="" (
  echo Neexistujici nebo prazdny connection profile pro "%IFNAME%"
  goto :ERR
)
if /i %CUR_CAT%==Private (
  set NEW_CAT=Public
) else (
  set NEW_CAT=Private
)
echo Nastavuji "%IFNAME%" z "%CUR_CAT%" na "%NEW_CAT%"
powershell -NoProfile -Command "Set-NetConnectionProfile -InterfaceAlias '%IFNAME%' -NetworkCategory %NEW_CAT%"
set PSRC=%ERRORLEVEL%
echo ERRORLEVEL = %ERRORLEVEL%, PSRC = %PSRC%
if %PSRC%==0 goto :OK
  echo Chyba pri nastavovani "%IFNAME%" z "%CUR_CAT%" na "%NEW_CAT%"
  echo Spustte jako Admin, popr. v PowerShell (Admin) overte: Get-NetAdapter ; Get-NetConnectionProfile
goto :ERR
:OK
echo Hotovo: "%IFNAME%" zmeneno z "%CUR_CAT%" na "%NEW_CAT%"
powershell -NoProfile -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('Nyni jste v rezimu %NEW_CAT%','Zmena rezimu internetove site',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"
endlocal
exit
:ERR
powershell -NoProfile -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('Chyba - zmena %IFNAME% z %CUR_CAT% neprobehla','Zmena rezimu internetove site',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"
rem chcp 1250
rem set ERR_MSG="Chyba - změna neproběhla"
rem set TIT_MSG="Změna režimu internetové sítě"
rem echo %TIT_MSG%: %ERR_MSG%
rem powershell -NoProfile -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('%ERR_MSG%','%TIT_MSG%',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"
rem powershell -NoProfile -Command "$text = [System.Text.Encoding]::GetEncoding(1250).GetString([System.Text.Encoding]::UTF8.GetBytes('Chyba - změna neproběhla')); Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show($text,'Změna režimu internetové sítě',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"
rem chcp 1250 && powershell -NoProfile -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('Chyba - změna neproběha','Změna režimu internetové sítě',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"
rem powershell -NoProfile -Command "$text = [System.Text.Encoding]::GetEncoding(1250).GetString([System.Text.Encoding]::UTF8.GetBytes('Chyba - změna neprobíhá')); Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show($text,'Změna režimu WiFi sítě',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"
rem powershell -NoProfile -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show([System.Text.Encoding]::GetEncoding(1250).GetString([System.Text.Encoding]::UTF8.GetBytes('Chyba - změna neproběhla')),'Změna režimu internetové sítě',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"
endlocal
exit

Byla tato odpověď užitečná?

Počet osob, které tuto odpověď považovaly za užitečnou: 1.

Počet dalších odpovědí: 6

Seřadit podle: Nejužitečnější
  1. L. - 530 Reputační body
    2026-02-18T05:58:14.9766667+00:00

    Um. int. nesnáší když se o ní mluví (o kterékoliv). Tak se tomu vyhni.

    Byla tato odpověď užitečná?

    Počet komentářů: 0 Žádné komentáře

  2. Amigo Ventero 10 Reputační body
    2026-02-17T09:45:07.34+00:00

    Funkční skript vypadá takto, ale zaboha nemůžu do messageboxu dostat češtinu. Když to spustím samostatně v cmd jen ten příkaz, tak korektně, ale jakmile to spustím ve skriptu .cmd, tak jsou tam nesmyslné znaky:

    @echo off

    setlocal

    rem Rucni nastaveni:

    rem set IFNAME=Wi-Fi

    rem echo IFNAME="%IFNAME%"

    rem Zjisteni a nastaveni dle MediaType:

    rem for /f "usebackq delims=" %%A in (`powershell -NoProfile -Command "Get-NetAdapter | Where-Object {($_.MediaType -eq 'Native 802.11' -or $_.MediaType -eq '802.3') -and $_.Status -eq 'Up'} | Select-Object -ExpandProperty Name | Select-Object -First 1"`) do set IFNAME=%%A

    rem Zjisteni a nastaveni dle nazvu:

    for /f "usebackq delims=" %%A in (`powershell -NoProfile -Command "Get-NetAdapter | Where-Object {($_.Name -like '*Wi-Fi*' -or $_.Name -like '*Ethernet*') -and $_.Status -eq 'Up'} | Select-Object -ExpandProperty Name | Select-Object -First 1"`) do set IFNAME=%%A

    if %IFNAME%=="" (

    echo Nebyl nalezen aktivni WiFi nebo Ethernet adapter

    goto :ERR

    )

    echo Nalezen aktivni sitovy adapter "%IFNAME%"

    echo Overeni adapteru...

    powershell -NoProfile -Command "if(-not (Get-NetAdapter -Name '%IFNAME%' -ErrorAction SilentlyContinue)) { Write-Output '>>PS: NOADAPTER' ; exit 2 } ; if((Get-NetAdapter -Name '%IFNAME%').Status -ne 'Up') { Write-Output '>>PS: NOTUP' ; exit 3 } ; Write-Output '>>PS: ADAPTER_OK'; exit 0"

    echo ERRORLEVEL=%ERRORLEVEL%

    echo Ziskavam aktualni kategorii...

    for /f "usebackq delims=" %%C in (`powershell -NoProfile -Command "Try { $p = Get-NetConnectionProfile -InterfaceAlias '%IFNAME%' -ErrorAction SilentlyContinue; if(-not $p){ Write-Output '' ; exit 3 } ; Write-Output $p.NetworkCategory ; exit 0 } Catch { exit 1 }"`) do set CUR_CAT=%%C

    echo CUR_CAT="%CUR_CAT%"

    if %CUR_CAT%=="" (

    echo Neexistujici nebo prazdny connection profile pro "%IFNAME%"

    goto :ERR

    )

    if /i %CUR_CAT%==Private (

    set NEW_CAT=Public

    ) else (

    set NEW_CAT=Private

    )

    echo Nastavuji "%IFNAME%" z "%CUR_CAT%" na "%NEW_CAT%"

    powershell -NoProfile -Command "Set-NetConnectionProfile -InterfaceAlias '%IFNAME%' -NetworkCategory %NEW_CAT%"

    set PSRC=%ERRORLEVEL%

    echo ERRORLEVEL = %ERRORLEVEL%, PSRC = %PSRC%

    if %PSRC%==0 goto :OK

    echo Chyba pri nastavovani "%IFNAME%" z "%CUR_CAT%" na "%NEW_CAT%"

    echo Spustte jako Admin, popr. v PowerShell (Admin) overte: Get-NetAdapter ; Get-NetConnectionProfile

    goto :ERR

    :OK

    echo Hotovo: "%IFNAME%" zmeneno z "%CUR_CAT%" na "%NEW_CAT%"

    powershell -NoProfile -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('Nyni jste v rezimu %NEW_CAT%','Zmena rezimu internetove site',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"

    endlocal

    exit

    :ERR

    powershell -NoProfile -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('Chyba - zmena %IFNAME% z %CUR_CAT% neprobehla','Zmena rezimu internetove site',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"

    rem chcp 1250

    rem set ERR_MSG="Chyba - změna neproběhla"

    rem set TIT_MSG="Změna režimu internetové sítě"

    rem echo %TIT_MSG%: %ERR_MSG%

    rem powershell -NoProfile -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('%ERR_MSG%','%TIT_MSG%',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"

    rem powershell -NoProfile -Command "$text = [System.Text.Encoding]::GetEncoding(1250).GetString([System.Text.Encoding]::UTF8.GetBytes('Chyba - změna neproběhla')); Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show($text,'Změna režimu internetové sítě',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"

    rem chcp 1250 && powershell -NoProfile -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('Chyba - změna neproběha','Změna režimu internetové sítě',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"

    rem powershell -NoProfile -Command "$text = [System.Text.Encoding]::GetEncoding(1250).GetString([System.Text.Encoding]::UTF8.GetBytes('Chyba - změna neprobíhá')); Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show($text,'Změna režimu WiFi sítě',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"

    rem powershell -NoProfile -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show([System.Text.Encoding]::GetEncoding(1250).GetString([System.Text.Encoding]::UTF8.GetBytes('Chyba - změna neproběhla')),'Změna režimu internetové sítě',[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)"

    endlocal

    exit

    Byla tato odpověď užitečná?


Vaše odpověď

Odpovědi můžou být autorem otázky označeny jako „Přijaté“ a moderátory jako „Doporučené“, což uživatelům pomůže zjistit, že odpověď vyřešila problém autora.