无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6197|回复: 60
打印 上一主题 下一主题

[求助] 想写一个新建系统账户的批处理,请指教:

  [复制链接]
跳转到指定楼层
1#
发表于 2019-9-6 16:08:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
系统用户账户管理里面新建账户时候,默认非管理员权限,要手动添加,操作比较麻烦,感觉不适合小白操作。所以想写个批处理,帮小白新建账户,并直接设置为管理员权限。批处理写了个大概,主要就是执行下列两行命令:

net user %u1% /add /logonpasswordchg:yes
net localgroup Administrators %u1% /add

但有个问题,如果新建的账户已经存在,或输入的字符不规范,要怎么检测判断?批处理要怎么写?麻烦坛里的高手帮忙指点指点,先感谢!




附上批处理内容:
@echo off

:menu
cls
set u1=""
set u2=""
echo.
echo.    创建一个新系统登陆账户,并设置为管理员权限
echo.

set /p u1="请输入新建帐户名称:"
if %u1%=="" (
echo.
echo.                  账户名不得为空,按任意键返回请重新输入,退出可直接点击关闭本程序窗口 (
echo.
pause > nul
goto menu
)

echo.
set /p u2="再次输入新帐户名称:"
if %u2%=="" (
echo.
echo.                  账户名不得为空,按任意键返回请重新输入,退出可直接点击关闭本程序窗口
echo.
pause > nul
goto menu
)

if %u1%==%u2% goto xjzh else (
echo.
echo.                  两次输入不一致,按任意键返回请重新输入,退出可直接点击关闭本程序窗口
echo.
pause > nul
goto menu
)

:xjzh
net user %u1% /add /logonpasswordchg:yes
net localgroup Administrators %u1% /add

echo.
echo.                  用户【 %u1%】已创建,请重启计算机并选择新账户登陆,或在 管理计算机用户 中对账户进行设置
echo.
pause > nul
exit

新建用户.txt (912 Bytes, 下载次数: 0)


2#
 楼主| 发表于 2019-9-6 16:30:29 | 只看该作者
如果账户已经存在,会出现这样的错误提示:

新建.png (9.58 KB, 下载次数: 71)

新建.png
回复

使用道具 举报

3#
 楼主| 发表于 2019-9-6 16:33:05 | 只看该作者
希望高手能帮忙指点:
1、如何检测判断用户是否存在?
2、如何检测判断输入的有特殊字符?
回复

使用道具 举报

4#
发表于 2019-9-6 17:19:13 来自手机 | 只看该作者
本帖最后由 窄口牛 于 2019-9-6 17:31 编辑

先获取个现有账户的列表,用户名没必要输两次确认。特殊字符这个不好解决,等高手吧。搜了一下,现成的有js限制输入非符号的代码。

点评

如果手误输入错误,直接就创建,两次是不是应该会保险一点。  详情 回复 发表于 2019-9-6 17:51
回复

使用道具 举报

5#
发表于 2019-9-6 17:22:17 | 只看该作者
net user 可以获取用户列表

点评

怎么判断 %u1% 在列表内呢? net user get caption|find /i "%u1%"&&goto zhcf 这样写好像是错误的,提示 找不到用户名  详情 回复 发表于 2019-9-6 18:15
回复

使用道具 举报

6#
 楼主| 发表于 2019-9-6 17:51:25 | 只看该作者
窄口牛 发表于 2019-9-6 17:19
先获取个现有账户的列表,用户名没必要输两次确认。特殊字符这个不好解决,等高手吧。搜了一下,现成的有js ...

如果手误输入错误,直接就创建,两次是不是应该会保险一点。
回复

使用道具 举报

7#
发表于 2019-9-6 18:15:38 来自手机 | 只看该作者
嗯,这个可以肯定,但是用户名是明文的,可以直接看到的,所以二次确认稍显累赘。

点评

有道理,回头改下,先把判断账号存在解决。  详情 回复 发表于 2019-9-6 18:20
回复

使用道具 举报

8#
 楼主| 发表于 2019-9-6 18:15:48 | 只看该作者
hszgb 发表于 2019-9-6 17:22
net user 可以获取用户列表

怎么判断 %u1% 在列表内呢?
net user get caption|find /i "%u1%"&&goto zhcf
这样写好像是错误的,提示 找不到用户名
回复

使用道具 举报

9#
 楼主| 发表于 2019-9-6 18:20:07 | 只看该作者
窄口牛 发表于 2019-9-6 18:15
嗯,这个可以肯定,但是用户名是明文的,可以直接看到的,所以二次确认稍显累赘。

有道理,回头改下,先把判断账号存在解决。
回复

使用道具 举报

10#
发表于 2019-9-6 21:18:34 | 只看该作者
感觉这批处理没什么用。

小白用户都是非小白用户给装的系统,要么内置帐户,要么管理员,默认非Users组的从未见过。

小白用户几乎都安装着360卫士、腾讯管家等之类的东西,你这脚本压根儿就运行不了!我写的脚本就有不止一次被报木马!

放弃吧,小白不会就不会吧!

点评

说的确实有道理,但还是想尝试提供一些常用操作,看是否能改变一下小白滥用用数字大师的习惯,为减少数字灾害做些努力。  详情 回复 发表于 2019-9-6 21:55
回复

使用道具 举报

11#
发表于 2019-9-6 21:54:05 | 只看该作者
本帖最后由 荣耀 于 2019-9-6 21:57 编辑
  1. set /p name1= 用户名
  2. for /f "delims=用户名 tokens=*" %%i in ('net user %name1%^|find /i "用户名"') do (set user=%%i)
  3. echo %user%
  4. if "%name1%"=="%user%" (
  5. echo 用户名已存在
  6. pause > nul
  7. )else (
  8. echo 用户名不存在
  9. pause > nul
  10. )
  11. pause > nul
复制代码

这个是判断用户名是否存在的
貌似有错,放弃,你拿去改进下,应该可以检测的了。

点评

好的,非常感谢,我先试试quya朋友的方法,两种都参考下。  详情 回复 发表于 2019-9-6 22:19
改进三处地方 delims tokens find 就行  详情 回复 发表于 2019-9-6 22:13
谢谢!我输入a1(有a1账号)测试了一下,判断好像不对,方法应该没错,我再检查一下。  发表于 2019-9-6 22:11
回复

使用道具 举报

12#
发表于 2019-9-6 21:54:19 | 只看该作者
本帖最后由 quya 于 2019-9-6 21:56 编辑

无需判断账户是否存在或者用户名输入不规范, 只要出错就重来

比如
net user xxx /add 2>nul||echo 用户名存在或有非法字符 &&goto menu

点评

谢谢!这个方法应该可以,但提示信息不能暂停,直接回到menu,要怎么完善呢?  详情 回复 发表于 2019-9-6 22:04
回复

使用道具 举报

13#
 楼主| 发表于 2019-9-6 21:55:40 | 只看该作者
nttwqz 发表于 2019-9-6 21:18
感觉这批处理没什么用。

小白用户都是非小白用户给装的系统,要么内置帐户,要么管理员,默认非Users组 ...

说的确实有道理,但还是想尝试提供一些常用操作,看是否能改变一下小白滥用用数字大师的习惯,为减少数字灾害做些努力。

未标题-1.jpg (115.55 KB, 下载次数: 80)

未标题-1.jpg

点评

支持这么伟大的尝试,虽然你也改变不了什么……  详情 回复 发表于 2019-9-6 22:18
回复

使用道具 举报

14#
 楼主| 发表于 2019-9-6 22:04:51 | 只看该作者
quya 发表于 2019-9-6 21:54
无需判断账户是否存在或者用户名输入不规范, 只要出错就重来

比如

谢谢!这个方法应该可以,但提示信息不能暂停,直接回到menu,要怎么完善呢?

点评

net user xxx /add 2>nul||echo 用户名存在或有非法字符&&echo.&&pause &&cls&&goto menu  详情 回复 发表于 2019-9-6 22:07
回复

使用道具 举报

15#
发表于 2019-9-6 22:07:39 | 只看该作者
本帖最后由 quya 于 2019-9-6 22:10 编辑
lhc0688 发表于 2019-9-6 22:04
谢谢!这个方法应该可以,但提示信息不能暂停,直接回到menu,要怎么完善呢?


net user xxx /add 2>nul||echo 用户名存在或有非法字符&&echo.&&pause &&cls&&goto menu

你menu中已经有了cls, 可以删除 &&cls

点评

可以暂停提示了,但判断好像出错  详情 回复 发表于 2019-9-6 22:17
回复

使用道具 举报

16#
发表于 2019-9-6 22:13:41 | 只看该作者
荣耀 发表于 2019-9-6 21:54
这个是判断用户名是否存在的
貌似有错,放弃,你拿去改进下,应该可以检测的了。

改进三处地方 delims tokens find 就行
回复

使用道具 举报

17#
 楼主| 发表于 2019-9-6 22:17:25 | 只看该作者
quya 发表于 2019-9-6 22:07
net user xxx /add 2>nul||echo 用户名存在或有非法字符&&echo.&&pause &&cls&&goto menu

你menu中 ...

可以暂停提示了,但判断好像出错

01.png (4 KB, 下载次数: 72)

01.png

点评

@echo off :menu cls set u1="" echo. echo. 创建一个新系统登陆账户,并设置为管理员权限 echo. set /p u1="请输入新建帐户名称:" if %u1%=="" ( echo. echo. 账户名不得为空  详情 回复 发表于 2019-9-6 22:33
正确了,语句很完美,非常感谢!  发表于 2019-9-6 22:26
哦,直接复制了,忘记把变量加进去,等下再测试下  发表于 2019-9-6 22:22
你先把2次输入这个去掉,程序只要好用就应该简洁点。 我没仔细看你的程序,自己判断吧。  详情 回复 发表于 2019-9-6 22:21
输入什么都提示错误。  发表于 2019-9-6 22:19
回复

使用道具 举报

18#
发表于 2019-9-6 22:18:35 | 只看该作者
lhc0688 发表于 2019-9-6 21:55
说的确实有道理,但还是想尝试提供一些常用操作,看是否能改变一下小白滥用用数字大师的习惯,为减少数字 ...

支持这么伟大的尝试,虽然你也改变不了什么……
回复

使用道具 举报

19#
 楼主| 发表于 2019-9-6 22:19:19 | 只看该作者
荣耀 发表于 2019-9-6 21:54
这个是判断用户名是否存在的
貌似有错,放弃,你拿去改进下,应该可以检测的了。

好的,非常感谢,我先试试quya朋友的方法,两种都参考下。
回复

使用道具 举报

20#
 楼主| 发表于 2019-9-6 22:21:08 | 只看该作者
荣耀 发表于 2019-9-6 22:13
改进三处地方 delims tokens find 就行

回复

使用道具 举报

21#
发表于 2019-9-6 22:21:15 | 只看该作者
本帖最后由 quya 于 2019-9-6 22:24 编辑
lhc0688 发表于 2019-9-6 22:17
可以暂停提示了,但判断好像出错


你先把2次输入这个去掉,程序只要好用就应该简洁点。

我没仔细看你的程序,自己判断吧。或者你把 2>nul去掉, 就可以看到为什么出错了。 2>nul 屏蔽了出错信息
回复

使用道具 举报

22#
发表于 2019-9-6 22:27:17 | 只看该作者
本帖最后由 荣耀 于 2019-9-6 22:30 编辑
  1. @echo off
  2. >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
  3. if '%errorlevel%' NEQ '0' (
  4. goto UACPrompt
  5. ) else ( goto gotAdmin )
  6. :UACPrompt
  7. echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
  8. echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
  9. "%temp%\getadmin.vbs"
  10. exit /B
  11. :gotAdmin
  12. if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
  13. title www.nat.ee
  14. color 2F
  15. :menu
  16. cls
  17. echo.
  18. echo.    创建一个新系统登陆账户,并设置为管理员权限
  19. echo.

  20. set /p u1="请输入新建帐户名称:"
  21. for /f " tokens=*" %%i in ('net user %u1%^|find /i "命令成功完成"') do (set user=%%i)
  22. if "%user%"=="%命令成功完成。" (
  23. echo 用户名已存在
  24. pause > nul
  25. goto menu
  26. )else (goto user1)
  27. :user1
  28. if %u1%=="" (
  29. echo.
  30. echo.                  账户名不得为空,按任意键返回请重新输入,退出可直接点击关闭本程序窗口 (
  31. echo.
  32. pause > nul
  33. goto menu
  34. )
  35. :user2
  36. echo.
  37. set /p u2="再次输入新帐户名称:"
  38. if %u2%=="" (
  39. echo.
  40. echo.                  账户名不得为空,按任意键返回请重新输入,退出可直接点击关闭本程序窗口
  41. echo.
  42. pause > nul
  43. goto menu
  44. )

  45. if %u1%==%u2% goto xjzh else (
  46. echo.
  47. echo.                  两次输入不一致,按任意键返回请重新输入,退出可直接点击关闭本程序窗口
  48. echo.
  49. pause > nul
  50. goto menu
  51. )

  52. :xjzh
  53. net user %u1% /add /logonpasswordchg:yes
  54. net localgroup Administrators %u1% /add

  55. echo.
  56. echo.                  用户【 %u1%】已创建,请重启计算机并选择新账户登陆,或在 管理计算机用户 中对账户进行设置
  57. echo.
  58. pause > nul
  59. exit
  60. pause
复制代码

你试试,这样应该没问题的了,解决了判断的问题。

点评

这样写检测应该更准确,可以把用户存在检测跟非法字符检测分开,不过语句好像还是有点问题。  详情 回复 发表于 2019-9-6 22:46
回复

使用道具 举报

23#
 楼主| 发表于 2019-9-6 22:33:41 | 只看该作者
本帖最后由 lhc0688 于 2019-9-6 22:41 编辑
lhc0688 发表于 2019-9-6 22:17
可以暂停提示了,但判断好像出错


@echo off

:menu
cls
set u1=""
echo.
echo.    创建一个新用户账号,并设置为管理员权限
echo.

set /p u1="请输入新建帐户名称:"
if %u1%=="" (
echo.
echo.                  账户名不得为空,按任意键返回请重新输入,退出可直接点击关闭本程序窗口 (
echo.
pause > nul
goto menu
)

echo.
echo.
net user %u1% /add /logonpasswordchg:yes 2>nul||echo.  -- 该用户名已存在,或有非法字符,请重新输入&&echo.&&pause &&goto menu
net localgroup Administrators %u1% /add

echo.
echo.                  用户【 %u1%】已创建,请切换新账户登陆并设置密码,或在【管理计算机用户】中对账户进行设置
echo.
pause > nul
exit
回复

使用道具 举报

24#
发表于 2019-9-6 22:34:17 | 只看该作者
我在给你完善些,等我下个版本,完美解决
回复

使用道具 举报

25#
 楼主| 发表于 2019-9-6 22:36:49 | 只看该作者
在荣耀、quya两位朋友帮助下,基本完成。再次感谢!

剩下就是如何提升账户权限(运行批处理命令不需要右键管理员),现在虽然加了管理员权限,但好像还是会提示。

点评

这个就是脚本自启权限  详情 回复 发表于 2019-9-6 22:41
回复

使用道具 举报

26#
发表于 2019-9-6 22:41:56 | 只看该作者
lhc0688 发表于 2019-9-6 22:36
在荣耀、quya两位朋友帮助下,基本完成。再次感谢!

剩下就是如何提升账户权限(运行批处理命 ...
  1. >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
  2. if '%errorlevel%' NEQ '0' (
  3. goto UACPrompt
  4. ) else ( goto gotAdmin )
  5. :UACPrompt
  6. echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
  7. echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
  8. "%temp%\getadmin.vbs"
  9. exit /B
  10. :gotAdmin
  11. if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
复制代码

这个就是脚本自启权限

点评

一下没看明白,开头是 >null 2>&1 ,要怎么加到批处理里面呢?  发表于 2019-9-6 22:49
回复

使用道具 举报

27#
 楼主| 发表于 2019-9-6 22:46:23 | 只看该作者
荣耀 发表于 2019-9-6 22:27
你试试,这样应该没问题的了,解决了判断的问题。

这样写检测应该更准确,可以把用户存在检测跟非法字符检测分开,不过语句好像还是有点问题。

02.png (4.04 KB, 下载次数: 79)

02.png
回复

使用道具 举报

28#
发表于 2019-9-6 22:47:54 | 只看该作者
本帖最后由 quya 于 2019-9-6 22:51 编辑

获得管理员权限代码也可以简洁点

  1. bcdedit >nul 2>nul &&goto gotadmin
  2. :UACPrompt
  3. echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
  4. echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
  5. "%temp%\getadmin.vbs"
  6. exit /B
  7. :gotAdmin
  8. if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
复制代码


普通用户其实是无法执行加入用户和管理员组这2句代码的, 否则人人都可以提权了。

点评

是的,所以才做这个批处理,替代系统账号管理界面,这样新建的用户有高权限,避免关闭admin后没法操作问题。  发表于 2019-9-6 23:03
两位的语法太高深了,彻底看不明白了,不过这个提升的是当前用户权限吧?如何提升 %u1%权限,直接用变量替换吗?  详情 回复 发表于 2019-9-6 22:54
回复

使用道具 举报

29#
 楼主| 发表于 2019-9-6 22:54:50 | 只看该作者
quya 发表于 2019-9-6 22:47
获得管理员权限代码也可以简洁点

两位的语法太高深了,彻底看不明白了,不过这个提升的是当前用户权限吧?如何提升 %u1%权限,直接用变量替换吗?
回复

使用道具 举报

30#
 楼主| 发表于 2019-9-6 22:58:46 | 只看该作者
如果能在新建账号时同步设置提升权限最好,不好操作的话,单独做个批处理,登陆后再提升应该也可以。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-3-15 03:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表