Command line 使用;设置/P";在IF语句中

Command line 使用;设置/P";在IF语句中,command-line,batch-file,cmd,Command Line,Batch File,Cmd,我正在创建一个批处理,将我的笔记本电脑变成wifi,让我的生活更容易在cmd中每次键入行 问题是wifi名称总是设置为键=,而不是我输入的名称 以下是我所做的: @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 wla

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

问题是wifi名称总是设置为键=,而不是我输入的名称

以下是我所做的:

@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

虽然开关和等号、等号和参数之间不应该有空格,但真正的罪魁祸首是因为您在
IF
语句中使用了
SET/p

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

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

  • 由于我们现在使用的是
    EnableDelayedExpansion
    ,所以请使用
    调用所有变量
    而不是
    %%
    ,例如:

    netsh wlan set hostednetwork mode=允许ssid=!身份证件键=!钥匙

  • 找到解决办法了吗

    @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
    

    不确定您的问题是什么,您的代码的简化版本对我来说运行良好:

    @echo OFF
    set /p option="Enter 1 to create wifi, Enter 2 to stop wifi "
    IF %option% EQU 1 (
        echo Option 1
    )
    
    IF %option% EQU 2 (
        echo Option 2
    )
    
    timeout /t 5
    
    这是我的输出--批处理文件名为“z.bat”

    C:\z>z
    Enter 1 to create wifi, Enter 2 to stop wifi 1
    Option 1
    
    Waiting for 2 seconds, press a key to continue ...
    
    C:\z>z
    Enter 1 to create wifi, Enter 2 to stop wifi 2
    Option 2
    
    Waiting for 4 seconds, press a key to continue ...
    
    C:\z>
    C:\z>cmd /version
    Microsoft Windows [Version 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
    

    这里有另一种方法。我还删除了ssid=和key=周围的空格,因为这可能是一个问题

    @echo OFF
    set "option="
    set /p "option=Enter a name to create wifi, or just press Enter to stop wifi: "
    
    IF not defined option (
    netsh wlan set hostednetwork mode=disallow
    goto :EOF
    )
    
        set /p key="Set password:"
        netsh wlan set hostednetwork mode=allow ssid=%option% key=%key%
        netsh wlan start hostednetwork
    
    timeout /t 5
    
    调用该函数的结果将是:

    function.bat
    Enter variables: a b c
    1- "a"
    2- "b"
    3- "c"
    

    这样,我们可以使用参数调用函数,在函数的另一部分使用参数,并使用集合中的新输入进行迭代。

    可能我误解了;我承认在阅读你的问题时有点困难。到底发生了什么?
    ssid
    是否按字面意思设置为key=?是的,ssid设置为key=,我想在您的
    set
    命令后输入
    echo%id%
    。我敢打赌,
    %id%
    未定义。@Stephan yes输出为空(未定义),您能帮助我吗。我是新手batch@BasicBridge-是的,编辑了我的答案。我忘记了
    SET/P
    IF
    语句中表现不好。。。这可能与解析时和执行时的评估有关。非常感谢@Jeremy J Starcher的帮助,我遇到了麻烦。设置/P在if块中不起作用。无论我如何找到+1的解决方案,您最初的问题都与何时发生扩展有关。如果使用延迟扩展,则可以使用原始代码结构。使用
    setlocal enableDelayedExpansion
    启用延迟扩展。有关更多信息,请在命令提示符下键入
    help set
    ,然后在“最后,添加了对延迟环境变量扩展的支持…”开头的行的一半处开始阅读。这个答案缺少有关代码执行操作的人员和原因的信息。我不会调用交互式设置参数,它们是输入。对于所有对此有问题的人:重要的是设置本地enabledelayedexpansion,而不是调用%variable%,尝试调用!变量
    function.bat
    Enter variables: a b c
    1- "a"
    2- "b"
    3- "c"