在IF语句中使用"SET/P"

Bas*_*dge 6 command-line cmd batch-file

我正在创建一个批处理,将我的笔记本电脑变成wifi,让我的生活更容易在每次cmd中输入行.

问题是wifi名称总是被设置为key = insted我输入的那个.

这是我做的:

@echo OFF
set /p option="Enter 1 to create wifi, Enter 2 to stop wifi "
IF %option% EQU 1 (
    set /p id="Enter wifi Name:"
    set /p key="Set password:"
    netsh wlan set hostednetwork mode=allow ssid = %id% key = %key%
    netsh wlan start hostednetwork
)

IF %option% EQU 2 (
netsh wlan set hostednetwork mode=disallow
)

timeout /t 5
Run Code Online (Sandbox Code Playgroud)

Lit*_*les 11

虽然你不应该有开关和等号,等号和参数之间的任何空间,真正的罪魁祸首是因为你使用SET /P的内部IF声明.

要纠正这个问题,您需要做两件事:

  1. Setlocal EnableDelayedExpansion@ECHO OFF语句之后添加到批处理文件的顶部(以便IF可以在执行时扩展块中的变量).

  2. 由于我们现在正在使用EnableDelayedExpansion,请使用!!而不是调用所有变量%%,例如:

    netsh wlan set hostednetwork mode=allow ssid=!id! key=!key!


Bas*_*dge 3

得到了解决方案

@echo off

echo What You What To Do ?
echo 1 to create wifi
echo 2 to stop wifi

set /p input=
if %input%==1 goto 1
if %input%==2 goto 2

:1
cls
set /p name=Enter wifi name 
set /p pass=Enter wifi password 
echo Creating wifi with
echo Name = %name% 
echo Password = %pass%
netsh wlan set hostednetwork mode=allow ssid="%name%" key="%pass%"
netsh wlan start hostednetwork
timeout /t 5
exit;

:2
cls
netsh wlan set hostednetwork mode=disallow
exit;
timeout /t 5
Run Code Online (Sandbox Code Playgroud)

  • +1,你原来的问题与扩展发生时有关。如果您使用延迟扩展,您可以使用原始代码结构。使用“setlocal enableDelayedExpansion”启用延迟扩展。有关详细信息,请从命令提示符处键入“help set”,然后从开始的行开始阅读大约一半的内容“最后,添加了对延迟环境变量扩展的支持...”* (2认同)