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