如何防止用户在我的代码中解释为命令时输入的密码?

时间:2014-12-31 20:02:15

标签: batch-file

我是编写批处理脚本的新手,我不断收到错误。基本上我编写的代码应该是创建帐户并将其提升为管理员状态的替代界面。到目前为止,我写了:

@echo off
echo Account Name:
set /p name=
set nameacc = %name%
echo Account Password:
set /p password=
set passacc = %password%
net user /add "%name%" & "%password%"   
cls
echo Account %name%,password: %password% created
pause
echo Would you like to elevate to Admin privelages? Y/N
set /p choice=
if '%choice%' == 'Y' goto A 
if '%choice%' == 'N' goto B
:A 
echo Elevating your Account...
net localgroup administrators %nameacc /add
echo Account created... Have fun..
pause
=exit
:B
exit

我遇到的一个问题是,如果输入的密码与控制台命令相同,则会返回该命令的帮助屏幕。

3 个答案:

答案 0 :(得分:5)

那是因为&是在一行上运行两个单独命令的方法。

net user /add "%name%" & "%password%" 

表示运行net user ...,然后运行%password%扩展为

的命令

我目前无法对其进行测试,但我认为语法只是

net user /add %name% %password%

作为旁注,我将您的管理员选择更改为

if /i '%choice:~0,1%' == 'Y' (goto A) else (goto B)

您拥有它的方式,您更有可能错误地创建管理员帐户。

答案 1 :(得分:3)

像这样设置的变量包括变量名称和内容中的空格

set passacc = %password%

请改用此方法:

set "passacc=%password%"

此外,此行缺少%

net localgroup administrators %nameacc /add

答案 2 :(得分:0)

一些评论:

  • 我不知道" Y"是默认答案,如果它不是你必须得到其他答案
  • 其他答案可能包括" y"和" n",你应该抓住他们
  • 我删除了一些空格,对它们非常小心
  • goto :EOF可能是EXIT的替代品,第一个退出当前脚本,最后一个退出任何脚本,子或父
  • 您未在:B中执行任何操作,如果是故意的,您可以退出IF语句
  • 如果您想填充变量nameacc,只需使用set /p nameacc=,无需涉及其他变量

    @echo off
    echo Account Name:
    set /p name=
    set nameacc=%name%
    echo Account Password:
    set /p password=
    set passacc=%password%
    net user /add "%name%" "%password%"
    cls
    echo Account "%name%",password: "%password%" created
    pause
    echo Would you like to elevate to Admin privelages? Y/N
    set /p choice=
    if '%choice%'=='Y' goto :A
    if '%choice%'=='N' goto :B
    goto :wronganswer
    
    :A 
    echo Elevating your Account...
    net localgroup administrators %nameacc% /add
    echo Account created... Have fun..
    pause
    exit
    
    :B
    exit
    
    :wronganswer
    echo Wrong answer
    goto :EOF